2009年11月20日 星期五

OUTER JOIN的注意事項

首先先說明一下什麼是OUTER JOIN。


SELECT * FROM A
JOIN B
ON A.ID = B.ID


上例是典型的 INNER JOIN,其意思為將 A 資料表 與 B 資料表 其 ID 欄位資料相等的結果列出。

OUTER JOIN 則是當我們有某些資料不僅是要 show 出兩個資料表相等的結果,

可能有一方以上的資料需要全部顯示,即使另一方沒有該筆資料的情況下,

就要使用 OUTER JOIN,沒有資料的另一方會顯示為NULL。

2009年11月15日 星期日

SQL 查詢時的差異

好一段時間沒有發表新的內容了!

最近在撰寫程式時,越來越覺得SQL語法的重要性。

所以查詢了一下JOIN的寫法,發現 Garadin 大大所說明的內容實在很有用,

因此就把它記下來,以便日後快速查閱。詳情請點我

首先就來看一下下面兩句 SQL 語法有何差異吧!


SELECT A.*
FROM A LEFT JOIN B ON A.ID = B.ID
WHERE B.ID = 4



SELECT A.*
FROM A LEFT JOIN B ON A.ID = B.ID AND B.ID = 4


原先乍看之下,覺得兩者其實沒什麼不同!後來發現我錯了..

以第一句來說,其執行步驟是先做 LEFT JOIN 後,針對 B.ID = 4 的條件做過濾

而第二句則是針對 A 與 B 資料表做 LEFT JOIN 的同時,

當 B.ID = 4 的情況下,列出所有 A 資料表與 B.ID = 4 做 LEFT JOIN 的所有結果!

此兩者的差異可說非常大,雖然查詢的結果有可能一樣,但是其觀念差異頗大,因此特別紀錄下來.