為什么要使用“外連接”
之前我們看到的左連接 (left join),又稱(chēng)內(nèi)部連接 (inner join)。在這個(gè)情況下,要兩個(gè)表格內(nèi)都有同樣的值,那一筆資料才會(huì)被選出。那如果我們想要列出一個(gè)表格中每一筆的資料,無(wú)論它的值在另一個(gè)表格中有沒(méi)有出現(xiàn),那該怎么辦呢?在這個(gè)時(shí)候,我們就需要用到 SQL OUTER JOIN (外部連接) 的指令。
外部連接的語(yǔ)法是依數(shù)據(jù)庫(kù)的不同而有所不同的。舉例來(lái)說(shuō),在 Oracle 上,我們會(huì)在 WHERE 子句中要選出所有資料的那個(gè)表格之后加上一個(gè) "(+)" 來(lái)代表說(shuō)這個(gè)表格中的所有資料我們都要。
假設(shè)我們有以下的兩個(gè)表格:
Store_Information 表格
|
|||||||||||||||
Geography 表格
|
我們需要知道每一間店的營(yíng)業(yè)額。如果我們用一個(gè)普通的連接,我們將會(huì)漏失掉 'New York'這個(gè)店,因?yàn)樗⒉淮嬖谟?Store_Information 這個(gè)表格。所以,在這個(gè)情況下,我們需要用外部連接來(lái)串聯(lián)這兩個(gè)表格:
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
我們?cè)谶@里是使用了 Oracle 的外部連接語(yǔ)法。
如果換成了Mysql:
select a1.store_name,sum(a2.sales) from geography a1 left join store_information a2
on a1.store_name=a2.store_name group by a1.store_name;
結(jié)果:
store_name | SALES |
Boston | $700 |
New York | |
Los Angeles | $1800 |
San Diego | $250 |
請(qǐng)注意: 當(dāng)?shù)诙€(gè)表格沒(méi)有相對(duì)的資料時(shí),SQL 會(huì)傳回 NULL 值。在這一個(gè)例子中, 'New York' 并不存在于 Store_Information 表格,所以它的 "SALES" 欄位是 NULL。
posted on 2008-03-20 20:07 秋楓故事 閱讀(619) 評(píng)論(0) 編輯 收藏