資源描述:
《左連接右連接全連接對(duì)比》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Oracle左連接、右連接、全外連接、(+)號(hào)作用??Oracle?外連接(1)左外連接(左邊的表不加限制)??????(2)右外連接(右邊的表不加限制)??????(3)全外連接(左右兩表都不加限制)?????外連接(OuterJoin)outerjoin則會(huì)返回每個(gè)滿足第一個(gè)(頂端)輸入與第二個(gè)(底端)輸入的聯(lián)接的行。它還返回任何在第二個(gè)輸入中沒有匹配行的第一個(gè)輸入中的行。外連接分為三種:左外連接,右外連接,全外連接。對(duì)應(yīng)SQL:LEFT/RIGHT/FULLOUTERJOIN。通常我們省略outer這個(gè)關(guān)鍵字。寫成:LEFT/RIGHT/FULLJOIN。?在左外連接和
2、右外連接時(shí)都會(huì)以一張表為基表,該表的內(nèi)容會(huì)全部顯示,然后加上兩張表匹配的內(nèi)容。如果基表的數(shù)據(jù)在另一張表沒有記錄。那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。?對(duì)于外連接,也可以使用“(+)”來表示。關(guān)于使用(+)的一些注意事項(xiàng):??????1.(+)操作符只能出現(xiàn)在where子句中,并且不能與outerjoin語法同時(shí)使用。??????2.當(dāng)使用(+)操作符執(zhí)行外連接時(shí),如果在where子句中包含有多個(gè)條件,則必須在所有條件中都包含(+)操作符??????3.(+)操作符只適用于列,而不能用在表達(dá)式上。??????4.(+)操作符不能與or和in操作符一起使用。????
3、??5.(+)操作符只能用于實(shí)現(xiàn)左外連接和右外連接,而不能用于實(shí)現(xiàn)完全外連接。?在做實(shí)驗(yàn)之前,我們先將dave表和bl里加一些不同的數(shù)據(jù)。以方便測試。SQL>select*frombl;???????IDNAME--------------------????????1dave????????2bl????????3bigbird????????4exc????????9懷寧SQL>select*fromdave;???????IDNAME--------------------????????8安慶????????1dave????????2bl????????1bl???
4、?????2dave????????3dba????????4sf-express????????5dmm2.1左外連接(Leftouterjoin/leftjoin)????leftjoin是以左表的記錄為基礎(chǔ)的,示例中Dave可以看成左表,BL可以看成右表,它的結(jié)果集是Dave表中的數(shù)據(jù),在加上Dave表和BL表匹配的數(shù)據(jù)。換句話說,左表(Dave)的記錄將會(huì)全部表示出來,而右表(BL)只會(huì)顯示符合搜索條件的記錄。BL表記錄不足的地方均為NULL.?示例:SQL>select*fromdavealeftjoinblbona.id=b.id;???????IDNAME???
5、???????????IDNAME---------------------------------------???????1bl?????????????????1dave???????1dave???????????????1dave???????2dave???????????????2bl???????2bl?????????????????2bl???????3dba????????????????3bigbird???????4sf-express?????????4exc???????5dmm????????????????????????????--此處B表
6、為null,因?yàn)闆]有匹配到???????8安慶????????????????????????????--此處B表為null,因?yàn)闆]有匹配到SQL>select*fromdavealeftouterjoinblbona.id=b.id;????????IDNAME??????????????IDNAME----------------------------------------????????1bl?????????????????1dave????????1dave???????????????1dave????????2dave???????????????2bl??
7、??????2bl?????????????????2bl????????3dba????????????????3bigbird????????4sf-express?????????4exc????????5dmm????????8安慶?用(+)來實(shí)現(xiàn),這個(gè)+號(hào)可以這樣來理解:+表示補(bǔ)充,即哪個(gè)表有加號(hào),這個(gè)表就是匹配表。所以加號(hào)寫在右表,左表就是全部顯示,故是左連接。?SQL>Select*fromdavea,blbwherea.id=b.id(+);???--注意:用(+)就要用關(guān)鍵字where