大数据开发之前期准备----SQL语句(2)

我们首先对前面所讲的SQL语句进行一个简单地复习

假设,现在我们有一个部门表里面包含了薪水等字段,我们要求对各个部门求薪水和

select deptno,sum(sal) from emp group by deptno;

如果同时对两个字段进行分组,如:各个部门各个岗位的薪水和

select deptno,job,sum(sal) from emp group by deptno,job;

如果同时需要对薪水和小于50000的部门进行分组,这就意味着我们要过滤出大于50000的组并显示出来

select deptno,job having sum(sal) from emp group by deptno,job having sum(sal) > 50000;

当然了,有些人喜欢使用子表来做,就是不用having(有可能他们不会)

select a.deptno,a.job,a.sum_sal from (select deptno,job,sum(sal) as sum_sal from emp group by deptno,job) as a where a.sum_sal > 50000;  这里我们将含有group by的语句的操作构建成一个临时的子表,应为是一个临时的子表所以你要给他一个别名,同样的sum(sal)这个套用了函数的字段也是一个临时的字段,我们也需要给予一个别名,然后再对这个子表进行查询操作。

以上是对group by和别名的复习

1,join  

join是用于将多个表通过某些字段进行链接的操作,而join由分为inner join(内链接或者等值链接),left join(左链接),right join(右链接),而一般在生产上我们都是使用做链接的,下面我们具体说明一下几个链接的不同。

我们先来看看我们的员工表是怎么样的:

然后是部门表:

这个我使用左链接,将员工表和部门表链接起来的结果,从图中我们可以看到,左表为员工表,而右表为部门表,在使用左链接的时候,左表的全部信息都被保留下来的,而右表能和左表配对的数据被保留下来的,未能配对的则不显示了。Ps:这里我们使用deptno这个字段来配对,当两个表的这个字段的值相同时就配对成功了。

这个我使用右链接,将员工表和部门表链接起来的结果,原理同上。

这个是我用内链接,将员工表和部门表链接起来的结果,就是内链接的时候没有以某一个表为准,当两个表的记录都可以相互配对的时候就被保留下来,否则都不显示。

这里我们总结一下join的语法结构:select [多个表中你想要显示的字段,要注意使用别名后各个表 . 字段的格式] from a表 as a(将a表别名为a) left join  b表 as b(同理) on a.字段以某种匹配方式b.字段[这里不一定使用=的,后面我会给出一个例子]。这里还可以使用子表的形式来添加group by等语法,多表链接只需要不断地添加left join c表 as c就可以了。

下面我将员工表,部门表,工资等级表链接起来,这里我想给出工资等级表的样式:

select * from salgrade;

多表链接,以及on后面的匹配方式;

select 

e.ename,e.job,e.sal,d.deptno,d.loc,s.grade

from emp as e

left join dept as d on e.deptno = d.deptno 

left join salgrade as s on e.sal between s.losal and s.hisal;

显示的结果为:

这里我说明一下为什么grade都是null值,因为我们的工资都超出范围了,其中gaozong这个人还没匹配到相关的部门了。

私人提醒:在操作中我们不可避免的需要用到两个字段相加或者其他数学运算操作,如果某个字段中有null值,那么数学运算后的结果也是null,这时我们可以给这个可能有null值的字段套一层IFNULL(具体的字段,0)这个函数,函数内的两个参数是要操作的字段,和如果是null值给定的默认值。使用了这个函数在计算的时候这个字段的null将被当作0去计算。

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/82781614