*多表查詢 分類:1.合併結果集 2.連接查詢 3.子查詢 *合併結果集:要求被合併的表中,列的類型和列數相同。 *UNION,去除重覆行。完全相同的行會被去除 *UNION ALL:不去除重覆行。 例:select * from ab UNION ALL select * from cd; *連接 ...
*多表查詢
分類:1.合併結果集
2.連接查詢
3.子查詢
*合併結果集:要求被合併的表中,列的類型和列數相同。
*UNION,去除重覆行。完全相同的行會被去除
*UNION ALL:不去除重覆行。
例:select * from ab UNION ALL select * from cd;
*連接查詢
分類:1.內連接
2.外連接:左外,右外,全外。
3.自然連接
*內連接:select * from 表1 別名1 inner join 表2 別名2 on 別名1.xx = 別名2.xx;//內連接只會將所有滿足條件的記錄查詢出來,不滿足條件的記錄不顯示。
*自然連接:select * from 表1 別名1 natural join 表2 別名2 ;//註意:自然連接不用寫on條件。直接關聯就可以了
*左外連接:select * from 表1 別名1 left outer join 表2 別名2 on 別名1.xx = 別名2.xx;
//左表記錄無論是否滿足條件都會查詢出來,右表沒有匹配到的行中的列顯示為Null。
*右外連接:select * from 表1 別名1 right outer join 表2 別名2 on 別名1.xx = 別名2.xx;
//右表記錄全顯示,左表沒匹配到的列顯示為null;
*全外連接:select * from 表1 別名1 full outer join 表2 別名2 on 別名1.xx = 別名2.xx;
*子查詢:
特點:查詢中嵌套查詢,註意select的個數。
出現位置:1.where後作為條件存在。2.from後作為表存在(多行多列的情況下)
例子:
1.查詢部門編號為30的員工編號和姓名
sleect e.eptno,e.ename from (select * from emp where deptno = 30) e;//這裡的子查詢必需起別名,不然前面不確定要查的是哪個表。
2.查詢本公司工資最高的員工信息
select * from emp where sal =(select Max(sal) from emp);
3.列出薪金高於工資平均薪金的所有員工信息,所在部門名稱,上級領導,工資等級
select e.*,d.dname,m.ename,s.grade //dname=>部門名稱,ename=>上級領導,grade=>工資等級
from emp e left outer join dept d on e.deptno = d.deptno //連接員工表emp與部門表dept,主鍵員工編號deptno
left outer join emp m on e.mgr = m.empno //員工表emp自身連接
left outer join salgrade s on e.sal between s.losal and s.hisal //員工表emp與工資等級表salgrade連接
where e.sal > (select AVG(sal) from emp);
.
總結:以上列出的只是基本的,關於多表查詢還有很多要學習的。現在用著還不太熟練,日積月累,做的項目多了就會慢慢成長起來的,加油加油。