Oracle串連查詢,徹底搞懂外串連(左外串連&右外串連)__Oracle

來源:互聯網
上載者:User

Oracle串連查詢有3種:交叉串連、內串連、外串連。

交叉串連結果是其他串連結果的超集,外串連結果是內串連結果的超集。

接下的例子以departments_v、employees_v兩個視圖資料為例(4條部門資料,9條人員資料)



1.交叉串連:又稱笛卡爾積串連,是兩個或多個表間的無條件串連,因此它會將表1的每一條資料與表2的每一條資料連線,因此結果會有4*9=36條資料



2.內串連:根據指定的串連條件進行串連查詢,因此滿足串連條件的資料才會出現在結果集。

兩個表進行內串連查詢時,先找到表1的第一條記錄,然後從頭到尾掃描表2,將符合串連條件的記錄與表1第一條記錄串連成結果;

當表2掃描一遍後,再從表1的第二條記錄開始,從頭到尾掃描表2,將符合串連條件的與表1第二條記錄串連成結果...

:

直至表1中所有記錄處理完畢為止。

Oracle中,內串連的兩種寫法如下圖



3.外串連:在內串連的基礎上,將某個串連表不符合串連條件的記錄加入結果集。

Oracle中,左外串連、右外串連均有兩種串連方式。

⑴先看標準SQL語句串連方式

【左外串連】在內串連基礎上,將串連操作符左側表不符合串連條件的記錄加入結果集中,右側表則用null填充。(個人覺得這更適合解釋標準SQL語句的串連方式)

下圖為【dept表 left join emp表】此時可以把dept表為基準,串連條件為兩表部門號相同且部門號為10;

左側表dept 10號部門的記錄 與右側表emp 10號部門的員工記錄 滿足串連條件,因此加入結果集;

左側表dept 20號部門的記錄 與右側表emp 20號部門的員工記錄 不滿足串連條件,但該查詢為左串連,因此會把左側表dept20號部門的記錄加入結果集,右側表則null填充;

...

下圖為【emp表 left join dept表】 可按著上面的情況分析



【右外串連】在內串連基礎上,將串連操作符右側表不符合串連條件的記錄加入結果集中,左側表則用null填充。(個人覺得這更適合解釋標準SQL語句的串連方式)

【下圖為dept表right join emp表】此時可以把emp表為基準,串連條件為兩表部門號相同且部門號為10;

右側表emp 10號部門的員工記錄 與左側表dept 10號部門的記錄 滿足串連條件,因此加入結果集;

右側表emp 20號部門的員工記錄 與左側表dept  20號部門的記錄 不滿足串連條件,但該查詢為右串連,因此會把右側表emp 20號部門的員工記錄加入結果集,左側表則null填充;

...


【下圖為emp表right join dept表】可按著上面的情況分析



⑵Oracle擴充的串連方式

【下圖為dept(+)emp】(右外串連)

【右外串連】在內串連基礎上,將串連操作符右側表不符合串連條件的記錄加入結果集中,左側表則用null填充。

因此可以解析為:串連條件等號哪邊的表用null填充,哪邊表的列均用(+),另一邊的表則會將不符合串連條件的記錄加入結果集,如下圖的emp表


交換表的順序為employees_v emp, departments_v dept(此時稱為左外串連),但結果一樣,只不過結果的列順序也交換過來,為EMPLOYEE_ID、FIRST_NAME、DEPARTMENT_ID、 DEPARTMENT_ID、DEPARTMENT_NAME


【下圖為dept emp(+)】(左外串連)

【左外串連】在內串連基礎上,將串連操作符左側表不符合串連條件的記錄加入結果集中,右側表則用null填充。

因此可以解析為:串連條件等號哪邊的表用null填充,哪邊表的列均用(+),另一邊的表則會將不符合串連條件的記錄加入結果集,如下圖的dept表


交換表的順序為employees_v emp, departments_v dept(此時稱為右外串連),但結果一樣,只不過結果的列順序也交換過來,為EMPLOYEE_ID、FIRST_NAME、DEPARTMENT_ID、 DEPARTMENT_ID、DEPARTMENT_NAME



!!!若dept表的列需全加(+),卻如下圖那樣,則不會起作用,僅僅如內串連查詢般。



4.全外串連:在內串連的基礎上,將串連操作符兩側表不符合串連條件的記錄加入結果集。

全外串連只有標準SQL語句的串連方式表示。

分析:將滿足條件的記錄選出,再將一側emp表中不滿足串連條件的記錄加入結果集,最後將另一側dept表中不滿足串連條件的記錄加入結果集。



下圖為去掉一個條件,分析可按照上圖情況推理。

比同樣串連條件的【內串連】多了最後一條記錄:



總結:(個人理解方式)

標準SQL語句串連方式:

【A left join B】left join即把左邊表A當作基準。在內串連操作方式下,遇到符合串連條件的記錄加入結果集,遇到A中不合格記錄也加入(因為它是標準),但對應B表的記錄用null填充;

【A right join B】right join即把右邊表B當作基準。在內串連操作方式下,遇到符合串連條件的記錄加入結果集,遇到B中不合格記錄也加入(因為它是標準),但對應A表的記錄用null填充;

oracle擴充串連方式:串連條件哪邊表的列用(+),則它的記錄用null值填充(也可把null當作預留位置一樣,沒有東西空佔著位置),另一邊的表就是會把不符合串連條件的記錄也加進查詢結果中。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.