1. 程式人生 > >關聯查詢

關聯查詢

mgr 笛卡爾 結果集 溢出 記錄 一個 了解 全部 n-1

關聯查詢

從多張表中查詢對應記錄的信息
關聯查詢的重點在於這些表中的記錄的對應關系,這個關系也成為連接條件
SELECT ename,dname,sal
FROM emp e,dept d
WHERE
e.deptno=d.deptno
AND
sal>2500

關聯查詢要添加連接條件,否則會產生笛卡爾積,笛卡爾積通常是一個無意義的結果集,它記錄
書是所有產於查詢的表的記錄數乘積的結果。要避免出現,數據量大時極易出現內存溢出等現象
n張表關聯查詢要有至少n-1個連接條件

內連接也是用來完成關聯查詢的 不滿足條件的不顯示
select a.ename,d.dname from emp a join dept d
on a.deptno=d.deptno
join ---on

外連接除了會將滿足連接條件的記錄查詢出來之外,還會將不滿足連接條件的記錄也查詢出來
外連接分為;
左外連接:以join 左側表作為驅動表(所有數據都被會查詢出來),那麽當該表中的某條記錄
不滿足連接條件時來自右側表中的字段全部填null
left join---on
select a.ename,d.dname from emp a join dept d
on a.deptno=d.deptno(+)
右外連接
right join---on
select a.ename,d.dname from emp a join dept d
on a.deptno(+)=d.deptno
全外連接
full join---on
select a.ename,d.dname from emp a full join dept d
on a.deptno=d.deptno

自連接

自連接即:當前表的一條記錄可以對應當前表自己的多條記錄
自連接是為了解決同類型數據但是又存在上下級關系的梳妝結構
數據時使用
自己連自己
select e.ename,m.ename,m.deptno,d.loc
from emp e join emp m on e.mgr=m.empno
join dept d
on m.deptno=d.deptno
where e.ename=‘smith‘

自然連接會自動尋找兩張表列名相同的做等值
連接。註意,兩張表中應當只有一列名字相同
才可以使用自然連接。


外連接的應用場景:
當我們查看部門表時,因為在進行與emp連接查詢
時,40號部門不存在任何員工,導致查詢結果該
記錄被忽略。這時若我們需要主要查看部門有哪些
時,就使用外連接。

關聯查詢