SQL(四) - 子查询和union以及limit分页
子查詢概念
什么是子查詢?子查詢都可以出現在哪里?
select語句當中嵌套select語句,被嵌套的select語句是子查詢。
子查詢可以出現在哪里?
1.where子句中使用子查詢
案例:找出高于平均薪資的員工信息。
select * from emp where sal > avg(sal); //錯誤的寫法,where后面不能直接使用分組函數。錯誤的寫法:where后面不能直接使用分組函數。
第一步:找出平均薪資
select avg(sal) from emp;第二步:where過濾
select * from emp where sal > 2073.214286;第一步和第二步合并:
select * from emp where sal > (select avg(sal) from emp);2.from后面嵌套子查詢 (重要)
應用場景:將查詢后得到的表,與其他表做連接查詢。
案例:找出每個部門平均薪水的等級。
第一步:找出每個部門平均薪水(按照部門編號分組,求sal的平均值)
select deptno,avg(sal) as avgsal from emp group by deptno;第二步:將以上的查詢結果當做臨時表t,讓t表和salgrade s表連接,
條件是:t.avgsal between s.losal and s.hisal
案例:找出每個部門平均的薪水等級(這個案例不需要看作臨時表)。
第一步:找出每個員工的薪水等級。
select e.ename,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;第二步:基于以上結果,繼續按照deptno分組,求grade平均值。
select e.deptno,avg(s.grade) from emp e join salgrade s on e.sal between s.losal and s.hisal group bye.deptno;3.在select后面嵌套子查詢 (很少用)。
案例:找出每個員工所在的部門名稱,要求顯示員工名和部門名。
方法一:等值內連接
select e.ename,d.dname fromemp e joindept d one.deptno = d.deptno;方法二:select后面子嵌套
select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;4.union (可以將查詢結果集相加)
案例:找出工作崗位是SALESMAN和MANAGER的員工?
第一種:select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; 第二種:select ename,job from emp where job in('MANAGER','SALESMAN');第三種:union
select ename,job from emp where job = 'MANAGER' union select ename,job from emp where job = 'SALESMAN';
只能用union的情況:
案例:兩張不相干的表中的數據拼接在一起顯示?
注意:兩張表查詢結果的列數必須一樣
5.limit (重點中的重點,以后分頁查詢全靠它了。)
limit是mysql特有的,其他數據庫中沒有,不通用。(Oracle中有一個相同的機制,叫做rownum)
作用:limit取結果集中的部分數據,這是它的作用。
語法機制:
limit startIndex, length
- startIndex表示起始位置,從0開始,0表示第一條數據。
- length表示取幾個
1.案例:取出工資前5名的員工(思路:降序取前5個)
select ename,sal from emp order by sal desc;取前5個:
select ename,sal from emp order by sal desc limit 0, 5; select ename,sal from emp order by sal desc limit 5; //startIndex省略表示從0開始注意:limit是sql語句最后執行的一個環節:
select 5... from 1... where 2... group by 3... having 4... order by 6... limit 7...;2.案例:找出工資排名在第4到第9名的員工?
select ename,sal from emp order by sal desc limit 3,6;通用的標準分頁sql?
每頁顯示3條記錄:
第1頁:0, 3
第2頁:3, 3
第3頁:6, 3
第4頁:9, 3
第5頁:12, 3
每頁顯示pageSize條記錄:
第pageNo頁:(pageNo - 1) * pageSize, pageSize
pageSize:是每頁顯示多少條記錄
pageNo :顯示第幾頁
總結
以上是生活随笔為你收集整理的SQL(四) - 子查询和union以及limit分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冬瓜糖的功效与作用、禁忌和食用方法
- 下一篇: SQL(五) - 表的创建以及操作