MySQL数据库笔记4——子查询、union及limit用法

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

子查询可以出现在:
MySQL数据库笔记4——子查询、union及limit用法_第1张图片
2.where子句中使用子查询
案例:找出高于平均薪资的员工信息?
select * from emm where sal>avg(sal); //错误写法,where后面不能直接使用分组函数
改正:select * from emp where sal>(select avg(sal) from emp);

3.from后面嵌套子查询
案例1:找出每个部门平均薪水的薪资等级?
select t.*,s.grade from (select deptno,avg(sal) avgsal from emp group by deptno) t join salgrade s on t.avgsal between s.losal and s.hisal;

案例2:找出每个部门平均的薪水等级?
select e.deptno,avg(s.grade) from emp e join salgrade s on e.sal between s.losal and hisal group by e.deptno;

4.select后面嵌套子查询
案例:找出每个员工所在的部门名称,要求显示员工名和部门名?
select e.ename,(select d.dname from dept d where e.deptno=d.deptno) as dname from emp e;

5.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’;

语法:(select colum1,colum2…columN from tableA ) union (select colum1,colum2…columN from tableB );
或者
(select colum1,colum2…columN from tableA ) union all (select colum1,colum2…columN from tableB );
注意:
(1)通过union连接的SQL它们分别单独取出的列数必须相同;
(2)不要求合并的表列名称相同时,以第一个sql 表列名为准;
(3)使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;
(4)被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序。

5.limit用法
(重点中的重点,以后分页查询会用到limit)
(1)limit是MySQL特有的,其他数据库中没有,不通用。Oracle中有一个相同的机制,叫做rownum。
(2)limit取结果集中的部分数据,这是它的作用。
语法机制:limit startIndex,length
startIndex表示起始位置,length表示取几个

案例1:取出工资前5名的员工?
select ename,sal from emp order by sal desc limit 0,5;
或者
select ename,sal from emp order by sal desc limit 5;

(3)limit是sql语句最后执行的一个环节。
MySQL数据库笔记4——子查询、union及limit用法_第2张图片
案例2:找出工资排列在第4到第9名的员工?
select ename,sal from emp order by sal desc limit 3,6;
//从第4名开始取6个

(4)通用的标准分页sql?
每页显示三条记录:
第1页:0,3
第2页:3,3
第3页:6,3
第4页:9,3
第5页:12,3

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

你可能感兴趣的:(MySQL学习笔记)