SQL -- JOIN子句

iSQlServer發表於2009-10-12
 JOIN(聯接)用來定義如何從多個表中選取資料並組合成一個結果集。JOIN子句有多種形式,這些形式改變著要進行聯接的表之間相互作用的方式。有4種不同型別的JOIN,其共同點是:通過記錄的聯接列,把一條記錄同一條或多條記錄進行匹配,從而產生出是這些記錄的超集的記錄。例如,從名為Films的表中提取一條記錄: 

FilmID    FilmName      YearMade

1           My Fair Lady  1964

      接下來,從名為Actors的表中提取記錄:

FilmID    FirstName    LastName

1           Rex             Harrison

1           Audrey         Hepburn

      通過JOIN,就能從兩條來自完全獨立的表記錄中生成一條記錄:

FilmID    FilmName     YearMade    FirstName   LastName

1          My Fair Lady  1964            Rex            Harrison

1          My Fair Lady  1964            Audrey        Hepburn

      下面我們來具體看看各種不同的JOIN型別。
      1、INNER JOIN
      
Inner Join 是最常用的JOIN型別。雖然都是基於一個或多個公共欄位來把記錄匹配到一起,但Inner Join只返回進行聯結的欄位上匹配的記錄。現在我們對錶做些
Inner Join 會得到什麼結果。下面是Films表:

FilmID    FilmName        YearMade

1           My Fair Lady    1964

2           Unforgiven      1992

      這是Actors表:

FilmID    FirstName    LastName

1           Rex             Harrison

1           Audrey         Hepburn

2           Clint            EastWood

5           Humphrey     Bogart

      使用Inner Join後,結果將會是這樣:

FilmID    FilmName       YearMade    FirstName    LastName

1           My Fair Lady   1964            Rex             Harrison        

1           My Fair Lady   1964            Audrey         Hepburn

2           Unforgiven     1992            Clint            EastWood

      實際上,Inner Join是在做排除----即是說,如果任一行在兩個表中不匹配,則註定將從最終的結果集中排除掉。

      2、OUTER JOIN
      先來看看 Outer Join 的語法

    Select From
        [Outer] Join On
      語法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本質上, Outer Join 是 inclusive, 叫它做包容性吧! 不同於 Inner Join 的排他性, 因此在 Left Outer Join 的查詢結果會包含所有 Left 資料表的資料。對Films表和Actors表做Left Outer Join的結果如下:(以FilmID相等作為on的條件)

FilmID    FilmName        YearMade    FirstName   LastName

1           My Fair Lady    1964           Audrey Hepburn
1           My Fair Lady    1964           Rex Harrison
2           Unforgiven      1992           Clint EastWood
      顛倒過來講, Right Outer Join 的查詢就會包含所有 Right 資料表的資料。對Films表和Actors表做Right Outer Join的結果如下:(以FilmID相等作為on的條件)

FilmID    FilmName        YearMade    FirstName   LastName

1           My Fair Lady    1964           Audrey        Hepburn
1           My Fair Lady    1964           Rex            Harrison
2           Unforgiven      1992           Clint           EastWood
5           NULL              NULL           Humphrey   Bogart

      Full Outer Join (全外連線)則包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。

      3、CROSS JOIN
      Cross Join用於對兩個源表進行純關係代數的乘運算。它不使用連線條件來限制結果集合,而是將分別來自兩個資料來源中的行以所有可能的方式進行組合。資料集合中一的每個行都要與資料集合二中的每一個行分別組成一個新的行。例如,如果第一個資料來源中有5個行,而第二個資料來源中有4個行,那麼在它們之間進行交叉連線就會產生20個行。人們將這種型別的結果集稱為笛卡爾乘積。大多數交叉連線都是由於錯誤操作而造成的;但是它們卻非常適合向資料庫中填充例子資料,或者預先建立一些空行以便為程式執行期間所要填充的資料保留空間。在交叉連線中沒有on條件子句。

原文地址:http://www.cnblogs.com/lantionzy/archive/2009/10/12/1581051.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616347/,如需轉載,請註明出處,否則將追究法律責任。

相關文章