oracle的多表查詢與表的連接


一、多表查詢
    在任何多表查詢中一定會產生笛卡爾積的問題,但是,笛卡爾積產生的結果對於用戶來說是毫無意義的,是重復的無用數據。因此我們需要消除笛卡爾積,那么在多表查詢的時候,就必須要有關聯字段。
    范例: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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM