1. 程式人生 > >oracle的多表查詢與表的連接

oracle的多表查詢與表的連接

出現 png 部分 使用 結果 笛卡爾積 利用 信息 毫無

一、多表查詢 在任何多表查詢中一定會產生笛卡爾積的問題,但是,笛卡爾積產生的結果對於用戶來說是毫無意義的,是重復的無用數據。因此我們需要消除笛卡爾積,那麽在多表查詢的時候,就必須要有關聯字段。 範例:emp.deptno=dept.deptno;兩張表中的關聯字段將消除笛卡爾積 SELECT * FROM emp, dept WHERE emp.deptno=dept.deptno; 多表的查詢,建議多做些習題增加熟練度。 二、表的連接 內連接:之前利用了WHERE子句消除了笛卡爾積,這個是內連接。只有滿足條件的數據才會顯示。 外連接:分為左外連接、右外連接、全外連接。

為了更好的觀察到連接的區別,現在已經在dept表中提供了一個沒有雇員的部門40,同時在emp表中增加一個沒有部門的雇員。

INSERT INTO emp (empno,ename,deptno) VALUES(8989,‘HELLO‘, null);

emp表目前如下:HELLO這個雇員沒有部門

技術分享圖片

觀察一:內連接實現效果

SELECT e.empno, e.ename, d.deptno, d.dname

FROM emp e, dept d

WHERE e.deptno = d.deptno;

技術分享圖片

此時沒有部門的雇員以及沒有雇員的部門信息都沒有出現,因為null的判斷不滿足。

觀察二:使用左(外)連接,希望所有的雇員信息都顯示出來,即便他沒有部門。

SELECT e.empno, e.ename, d.deptno, d.dname

FROM emp e, dept d

WHERE e.deptno = d.deptno(+);

技術分享圖片

此時出現了沒有部門的雇員。也就是左表的數據全部顯示了。

觀察三:使用右(外)連接,將所有的部分信息都顯示出來。

SELECT e.empno, e.ename, d.deptno, d.dname

FROM emp e, dept d

WHERE e.deptno(+) = d.deptno;

技術分享圖片

內連接指的就是所有滿足關聯條件的數據出現,不滿足的不出現。外連接就是指定一張數據表中的數據全部都顯示,但是沒有對應的其他表數據,內容為null。

oracle的多表查詢與表的連接