数据库 --- DQL 子查询、Union 和 limit 的使用

一、子查询

select 语句中嵌套 select 语句,被嵌套的 select 语句是子查询。

语法结构:

select ... (select) from ... (select) where ... (select);

二、where 后面嵌套子查询

案例:找出高于平均薪资的的员工信息。

三、from 后面嵌套子查询

案例一:找出每个部门平均薪水的薪资等级。

第一步:找出每个部门平均薪水

第二步:将第一步查询结果当做临时表 t ,让 t 表和 salgrade 表连接, 条件是:t.avgsal between s.losal and s.hisal

注意: sql 语句的执行结果可以当成一张表,把这张表看做 t 表。

案例二:找出每个部门平均的薪水等级。

第一步:找出每个员工的薪水等级

第二步:基于以上结果,继续按照deptno 分组,求 garde 平均值。

四、 select 后面嵌套子查询

案例:找出每个员工所在的部门名称,要求显示员工名和部门名。(以下两种方法都可以)

 五、union (可以将查询结果相加)

案例:找出工作岗位是 salesman 和 manager 的员工

第一种:select ename,job from emp where job = manager or job = salesman;

第二种:select ename,job from emp where job in ( manager , salesman);

第三种:select ename,job from emp where job = manager union select ename,job from emp where job = salesman;

union 可以将两张不相干的表中的数据拼接在一起使用。

六、limit 的使用

limit 是 mysql 中特有的,其他数据库中没有,不通用。

limit 取结果集中的部分数据。

语法机制:

limit startIndex,length

startIndex表示起始位置,从0开始,0表示第一条数据,length 表示取几个

案例:取出工资前五名的员工

第一步:排序 select ename,sal from emp order by sal desc;

第二步:去前五 select ename,sal from emp order by sal desc limit 0,5;

或者 select ename,sal from emp order by sal desc limit 5;

limit 是 sql 语句最后一个环节

select ... from ... where ... group by ... having ... order by ... limit ...;

5 1 2 3 4 6 7

案例:找出工资排名在第4到第9名的员工。

七、通用的标准分页sql 

每页显示3条记录:

第一页:0,3

第二页:3,3

第三页:6,3

第四页:9,3

每页显示pageSize 条记录: 第pageNo页:(pageNo-1)*pageSize,pageSize

经验分享 程序员 微信小程序 职场和发展