oracle 連接查詢--內連接與外連接


一、外連接

oracle 連接查詢分為外鏈接和內連接,我們先看外連接【outer join】。oracle 的外連接查詢分為:

  • 左外連接 (左邊的表不加限制) left outer join
  • 右外連接 (右邊的表不加限制) right outer join
  • 全外連接 (左右兩表都不加限制)full outer join; 通常outer關鍵字可省略,寫成:left/right/full join 即可。

在左右連接時,通常都會以一張表如A表為基礎表,該表的內容會全部顯示,再加上A表和B表匹配的內容。如果A表中的數據在B表中沒有記錄,那么會在結果集中以空值顯示。

關於外連接,也可以使用(+)來表示。關於使用(+)的一些注意事項:

  1. (+)操作符只能出現在where子句中,且不能與 outer join 語句同時使用。
  2. 使用(+)操作符執行外連接時,如果where子句中存在有多個條件,則必須在所有條件中都包含(+)操作符。
  3. (+)操作符值適用於列,不能用在表達式上
  4. (+)操作符不能與OR和IN操作符一起使用
  5. (+)只能用於實現左外連接和右外連接,不能用於實現全外連接。

1.左外連接--left (outer) join

    左外連接是以左表為基礎表,示例中以 emp 表為左表,顯示所有的查詢數據;以 dept 表為右表,顯示與 emp 表匹配后的數據,即顯示符合查詢條件的數據。

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e left join dept d on e.deptno=d.deptno;
或
select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e left outer join dept d on e.deptno=d.deptno;

 

    用(+)操作符來實現。這個(+) 操作符可以這樣理解: + 表示補充,即哪個表有+號,哪個表就是匹配表。如果 + 號寫在右表,則左表就全部顯示,所以為左連接。

  【(+):Oracle專用的聯接符,在條件中出現在左邊指右外聯接,出現在右邊指左外聯接

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno(+);

 

 

2.右外連接--right (outer) join

    右外連接與左外連接正好相反,它是以右表為基礎表。在示例中,dept 表為右表,全部顯示;emp 表為左表,顯示符合查詢條件的數據。emp表記錄不足的地方顯示為NULL。

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e right join dept d on e.deptno=d.deptno;
或
select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e right outer join dept d on e.deptno=d.deptno;

 

     用(+)操作符顯示,即為:

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e,dept d where e.deptno(+)=d.deptno;

 

  紅線框中為dept表中有,而emp表中沒有的數據,顯示為NULL。

 

 

3.全外連接--(FULL OUTER JOIN/FULL JOIN

    全外連接對左表和右表都不做限制,所有的記錄均顯示,兩表不足的地方都為NULL。全外連接不支持(+)寫法

  

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e full join dept d on e.deptno=d.deptno;
或
select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e full outer join dept d on e.deptno=d.deptno;

 

 二、內連接

    內連接也叫簡單連接,只返回滿足條件的記錄。用inner join......on.. 來標記,inner可省略。

select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e inner join dept d on e.deptno=d.deptno;
或
select e.deptno,e.ename,e.job,e.sal,d.dname,d.deptno from emp e join dept d on e.deptno=d.deptno;

 


免責聲明!

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



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