Oracle 内、外连接
一、Oracle連接類型
? ? ☆說明:按照自己的理解劃分的類型,并不是官方定義。
????1、內連接
????????????①等值連接
????????????②非等值連接
????????????③自然連接 ? ???
????2、外連接
????????????①左外連接
????????????②右外連接
????????????③全外連接 ? ??
二、表數據準備
????????????????????????????
| t表 | |
| 字段a | 字段b |
| 1 | 18 |
| 2 | 28 |
| 3 | 38 |
| 4 | NULL |
| t1表 | |
| 字段x | 字段y |
| 1 | 9 |
| 2 | 8 |
| 3 | 7 |
三、內連接
????1、內連接是通過inner join進行多表關聯,展示查詢結果,示例如下:
????????SQL>select * from t inner join t1 on t.a=t1.x;
????? ?效果展示:
????????說明:通過t表inner join t1表,我們得到了上圖的展示效果。
??? 2、同樣實現上圖中的查詢結果,我們還可以利用等值連接的方式實現
????????SQL>select * from t,t1 where t.a=t1.x;
????3、inner join可以簡化為join,但是實際使用中不建議這樣書寫,因為可讀性不高。
????4、通俗的理解是等值連接、非等值連接、自然連接都是內連接這個大范疇的具體表現形式。
? ? 5、不等值連接可以用where和inner join兩種方式實現
????????SQL>select * from t inner join t1 on t.a<>t1.x;
????????SQL>select * from t,t1 where t.a<>t1.x;
????????上面這兩句sql的展示結果是相同的。
? ? 6、自連接(self join)是SQL語句中經常要用的連接方式,使用自連接可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的數據。
????????例如:select * from employee worker,employee manger where worker.id=manger.id
四、外連接
????1、左外連接:通過關鍵字left join實現,全寫是left out join,實際操作過程中一般寫作left join,還可以通過在右側連接值后加(+)來代替,左連接的意思是兩表關聯,顯示查詢數目以左表為準,但是約束受到右表的影響,對于不符合等值的情況,用NULL代替,如下例:
說明:首先通過等值連接,正常把前3行數據關聯顯示出來,之所以顯示第4行是因為sql語句是左連接,正如我們所述,數據展示條數以左表為準,但是不符合要求的統統用NULL進行了填充。
????2、右連接:與左連接相反,核心思想相同,只要熟練掌握左連接,右連接自然無師自通。
????3、關于(+)使用的注意事項:
(+)操作符只能出現在where子句中,并且不能與outer join語法同時使用。
當使用(+)操作符執行外連接時,如果在where子句中包含有多個條件,則必須在所有條件中都包含(+)操作符
(+)操作符只適用于列,而不能用在表達式上。
(+)操作符不能與or和in操作符一起使用。
(+)操作符只能用于實現左外連接和右外連接,而不能用于實現完全外連接。?
4、全外連接:通過full join關鍵字連接實現,左邊和右表都不受限制,兩表都不滿足條件的情況都用NULL填充,全外連接不支持(+)這種寫法,即不能在左表和右表兩邊都寫(+)。
????????SQL> select * from t full join t1 on t.a=t1.x;
轉載于:https://blog.51cto.com/dushuai/1562614
總結
以上是生活随笔為你收集整理的Oracle 内、外连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还是分了的好——看惠普、赛门铁克拆分
- 下一篇: SQL Server 查看identit