mysql-DQL-子查询select-合并union-分页limit

 

一、子查询:select 语句中嵌套select语句,被嵌套的叫做子查询;出现位置:select-- (select)、from--   (select)、where-- (select)

  • 1、select后面(select)子查询
  • 案例:找出比最低工资高的员工姓名和工资(where子句中不能直接使用分组函数)
  • 思路:
  • 1、找出最低工资:select  min(sal)from  emp;  
  • 2、找出大于最低工资的:select ename,sal from emp where sal > 800;
  • 3、合并: select ename,sal from emp where sal > (select min(sal) from emp);
  • 2、 子查询:from后面(select):技巧:from后面的子查询,可以将子查询的查询结果当作一张临时表
  • 案例:找出每个岗位的平均工资的薪资等级
  • 思路:
  • 1、找出每个岗位平均工资,按照岗位分组求平均值:select job,avg(sal) from emp group by job;
  • 2、把以上查询结果当作一张单独存在的真实表格:t
  • 3、把查询的薪资等级表当作一张真实存在的表:s ---- select *from salgrade;
  • 4、t表和s表进行表连接,条件:t表avg(sal) between s.losal and s.hisal; 将t表,sql语句整体带入
  • select            t.*,s.grade
  • from            ( select job,avg(sal) as avgsal from emp group by job) t
  • join              salgrade s
  • on                t.avgsal between s.losal and s.hisal;

 二、union 合并查询结果集

  • 1、合并查询结果集:把乘法变为加法减少匹配次数,性能要快
  • 2、union 在进行结果集 ,合并时要求两个结果集的列数相同
  • 3、oracle数据库要求结果集合并时列和列的数据类型必须相同
  • 案例:查询工作岗位是MANAGER和SELESMAN的员工:
  • select ename,job from emp where job  = 'MANAGER' or job = 'SELESMA';(效率低做乘法:笛卡尔积)
  • union语句:(效率高做加法)
  • select ename,job from emp where job = 'MANAGER'
  • union
  • select ename,job from emp where job = 'SELESMAN';

 

三、limit分页:

  • 分页操作: limit (pageNo - 1) * pageSize , pageSize
  • 重要:每页显示几条起始下标(pageNo - 1)*pageSize,pageNo页码;pageSize记录:
  • 每页显示三条记录
  • 第一页:limit 0,3             [0 1 2]  第一页起始下标:(1-1)*3
  • 第二页:limit 3,3            [3 4 5]  第二页起始下标:(2-1)*3
  • 第三页:limit 6,3            [6 7 8]  第三页起始下标:(3-1)*3
  • 1、将查询结果集的一部分取出来通常使用在分页查询中;用来提高用户体验,一次性全查询出来,用户体验差。
  •    
  • 2、语法:limit(startIndex,length):(从零开始的计算的起始下标 , 长度就是包含几条数据)
  • 3、注意:mysql中limit在order by之后执行!
  • 案例:按照薪资降序,去除排名前五的员工:
  • select        ename,sal
  • from          emp
  • order by     sal desc
  • limit           0,5
  •  取出来3-5名员工的姓名,工资?
  • select       ename,sal
  • from         emp
  • order by    sal desc
  •  limit        2,3;         (2表示起始位置的下标从零开始,排名第三下标是2,  3表示长度,3、4、5三条数据;)

四、DQL关键字书写顺序:

  •  书写顺序:select--from--where--group by--having--order by--limit
  • 执行顺序:
  • 1/from
  • 2/where
  • 3/group by
  • 4/having
  • 5/select
  • 6/order by
  • 7/limit

 

posted @ 2022-04-13 21:45  280887072  阅读(174)  评论(0编辑  收藏  举报