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

一、子查询

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

语法结构:

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

二、where 后面嵌套子查询

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第1张图片

三、from 后面嵌套子查询

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

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第2张图片

数据库 --- DQL 子查询、Union 和 limit 的使用_第3张图片 

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第4张图片

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

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

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第5张图片

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第6张图片

四、 select 后面嵌套子查询

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

数据库 --- DQL 子查询、Union 和 limit 的使用_第7张图片

数据库 --- DQL 子查询、Union 和 limit 的使用_第8张图片

 五、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';

数据库 --- DQL 子查询、Union 和 limit 的使用_第9张图片

 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名的员工。

数据库 --- DQL 子查询、Union 和 limit 的使用_第10张图片

七、通用的标准分页sql 

每页显示3条记录:

第一页:0,3

第二页:3,3

第三页:6,3

第四页:9,3

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

 

你可能感兴趣的:(数据库,sql,开发语言)