之前我們看到的左連接 (left join),又稱內部連接 (inner join)。在這個情況下,要
兩個表格內都有同樣的值,那一筆資料才會被選出。那如果我們想要列出一個表格中每一筆的資料,
無論它的值在另一個表格中有沒有出現,那該怎麼辦呢?在這個時候,我們就需要用到
SQL OUTER JOIN (外部連接) 的指令。
外部連接的語法是依資料庫的不同而有所不同的。舉例來說,在 Oracle 上,
我們會在 WHERE 子句中要選出所有資料的那個表格之後加上一個 "(+)"
來代表說這個表格中的所有資料我們都要。
假設我們有以下的兩個表格:
|
Store_Information 表格
|
store_name
|
Sales
|
Date
|
|
Los Angeles
|
$1500
|
Jan-05-1999
|
|
San Diego
|
$250
|
Jan-07-1999
|
|
Los Angeles
|
$300
|
Jan-08-1999
|
|
Boston
|
$700
|
Jan-08-1999
|
|
Geography 表格
|
region_name
|
store_name
|
|
East
|
Boston
|
|
East
|
New York
|
|
West
|
Los Angeles
|
|
West
|
San Diego
|
|
我們需要知道每一間店的營業額。如果我們用一個普通的連接,我們將會漏失掉
'New York'這個店,因為它並不存在於 Store_Information 這個表格。
所以,在這個情況下,我們需要用外部連接來串聯這兩個表格:
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 的外部連接語法。
結果:
| store_name | SALES |
| Boston | $700 |
| New York | |
| Los Angeles | $1800 |
| San Diego | $250 |
請注意: 當第二個表格沒有相對的資料時, SQL 會傳回 NULL 值。在這一個例子中,
'New York' 並不存在於 Store_Information 表格,所以它的 "SALES" 欄位是 NULL.
下一頁:SQL Concatenate
網站導引 |
其他資源
|