数据库 --- 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