資源描述:
《oracle表連接方式(內(nèi)連接-外連接-自連接)詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、OracleOracle表之間的連接分為三種:1.內(nèi)連接(自然連接)2.外連接(1)左外連接(左邊的表不加限制)(2)右外連接(右邊的表不加限制)(3)全外連接(左右兩表都不加限制)3.自連接(同一張表內(nèi)的連接)SQL的標準語法:selecttable1.column,table2.columnfromtable1[inner
2、left
3、right
4、full]jointable2ontable1.column1=table2.column2;innerjoin表示內(nèi)連接;leftjoin表示左外連接;rightjoin表示右外連接;fulljoi
5、n表示完全外連接;on子句用于指定連接條件。注意:如果使用from子句指定內(nèi)、外連接,則必須要使用on子句指定連接條件;如果使用(+)操作符指定外連接,則必須使用where子句指定連接條件。一.內(nèi)連接(InnerJoin/Join)1.1InnerJoinInnerjoin邏輯運算符返回滿足第一個(頂端)輸入與第二個(底端)輸入聯(lián)接的每一行。這個和用select查詢多表是一樣的效果,所以內(nèi)連接用的很少。還有一點要說明的就是Join默認就是innerjoin。所以我們在寫內(nèi)連接的時候可以省略inner這個關(guān)鍵字。1.2下面舉例來說明內(nèi)連接:1.2.
6、1先創(chuàng)建2張測試表并插入數(shù)據(jù):SQL>select*fromdave;IDNAME--------------------1dave2bl1bl2daveSQL>select*frombl;IDNAME--------------------1dave2bl1.2.3用內(nèi)鏈接進行查詢:SQL>Selecta.id,a.name,b.namefromdaveainnerjoinblbona.id=b.id;--標準寫法IDNAMENAME------------------------------1davedave2blbl1bldave2dave
7、bl6OracleSQL>Selecta.id,a.name,b.namefromdaveajoinblbona.id=b.id;--這里省略了inner關(guān)鍵字IDNAMENAME------------------------------1davedave2blbl1bldave2daveblSQL>Selecta.id,a.name,b.namefromdavea,blbwherea.id=b.id;--select多表查詢IDNAMENAME------------------------------1davedave2blbl1bldav
8、e2davebl從這三個SQL的結(jié)果我們也可以看出,他們的作用是一樣的。1.3自然連接(Naturaljoin)自然連接是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同的字段,然后自動地將他們連接起來,并返回所有符合條件按的結(jié)果。先看一下自然連接的例子:SQL>Selectid,namefromdaveanaturaljoinblb;IDNAME--------------------1dave2bl這里我們并沒有指定連接的條件,實際上oracle為我們自作主張的將,dave表中的id和name字段與bl表中的id和name字段進行了連接。也就是實際上相
9、當于SQL>Selectdave.id,bl.nameFromdavejoinblondave.id=bl.idanddave.name=bl.name;IDNAME--------------------1dave2bl因此,我們也可以將自然連接理解為內(nèi)連接的一種。有關(guān)自然連接的一些注意事項:(1).如果做自然連接的兩個表的有多個字段都滿足有相同名稱個類型,那么他們會被作為自然連接的條件。(2).如果自然連接的兩個表僅是字段名稱相同,但數(shù)據(jù)類型不同,那么將會返回一個錯誤。一.外連接(OuterJoin)outerjoin則會返回每個滿足第一個(
10、頂端)輸入與第二個(底端)輸入的聯(lián)接的行。它還返回任何在第二個輸入中沒有匹配行的第一個輸入中的行。外連接分為三種:左外連接,右外連接,全外連接。對應(yīng)SQL:LEFT/RIGHT/FULLOUTERJOIN。通常我們省略outer這個關(guān)鍵字。寫成:LEFT/RIGHT/FULLJOIN。在左外連接和右外連接時都會以一張表為基表,該表的內(nèi)容會全部顯示,然后加上兩張表匹配的內(nèi)容。如果基表的數(shù)據(jù)在另一張表沒有記錄。那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。對于外連接,也可以使用“(+)”來表示。關(guān)于使用(+)的一些注意事項:1.(+)操作符只能出
11、現(xiàn)在where子句中,并且不能與outerjoin語法同時使用。2.當使用(+)操作符執(zhí)行外連接時,如果在where子句中包含有多個條件