之前我們看到的左連接 (left join),又稱內(nèi)部連接 (inner join)。在這個情況下,要兩個表格內(nèi)都有同樣的值,那一筆資料才會被選出。那如果我們想要列出一個表格中每一筆的資料,無論它的值在另一個表格中有沒有出現(xiàn),那該怎么辦呢?在這個時候,我們就需要用到 SQL OUTER JOIN (外部連接) 的指令。
外部連接的語法是依數(shù)據(jù)庫的不同而有所不同的。舉例來說,在 Oracle 上,我們會在 WHERE 子句中要選出所有資料的那個表格之后加上一個 "(+)" 來代表說這個表格中的所有資料我們都要。
假設(shè)我們有以下的兩個表格:
Store_Information 表格
store_namesalesdate
Los Angeles$1500jan-05-1999
San Francisco$300jan-08-1999
Boston$700jan-08-1999
Geography 表格
region_namestore_name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego
我們需要知道每一間店的營業(yè)額。如果我們用一個普通的連接,我們將會漏失掉 ’New York’這個店,因為它并不存在于 Store_Information 這個表格。所以,在這個情況下,我們需要用外部連接來串聯(lián)這兩個表格:
SELECT A1.store_name, SUM(A2.Sales) SALES FROM Georgraphy A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name
我們在這里是使用了 Oracle 的外部連接語法。
結(jié)果:
store_name SALES
Boston $700
New York
Los Angeles $1800
San Diego $250
請注意: 當(dāng)?shù)诙€表格沒有相對的資料時,SQL 會傳回 NULL 值。在這一個例子中, ’New York’ 并不存在于 Store_Information 表格,所以它的 "SALES" 欄位是 NULL。
外部連接的語法是依數(shù)據(jù)庫的不同而有所不同的。舉例來說,在 Oracle 上,我們會在 WHERE 子句中要選出所有資料的那個表格之后加上一個 "(+)" 來代表說這個表格中的所有資料我們都要。
假設(shè)我們有以下的兩個表格:
Store_Information 表格
store_namesalesdate
Los Angeles$1500jan-05-1999
San Francisco$300jan-08-1999
Boston$700jan-08-1999
Geography 表格
region_namestore_name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego
我們需要知道每一間店的營業(yè)額。如果我們用一個普通的連接,我們將會漏失掉 ’New York’這個店,因為它并不存在于 Store_Information 這個表格。所以,在這個情況下,我們需要用外部連接來串聯(lián)這兩個表格:
SELECT A1.store_name, SUM(A2.Sales) SALES FROM Georgraphy A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name
我們在這里是使用了 Oracle 的外部連接語法。
結(jié)果:
store_name SALES
Boston $700
New York
Los Angeles $1800
San Diego $250
請注意: 當(dāng)?shù)诙€表格沒有相對的資料時,SQL 會傳回 NULL 值。在這一個例子中, ’New York’ 并不存在于 Store_Information 表格,所以它的 "SALES" 欄位是 NULL。