目錄
- 1.測試資料
- 2. left join 之後ON中篩選條件
- 3. left join之後使用where連線篩選條件
1.測試資料
WITH
temp1 AS
(
SELECT '張三' AS Name, 1 AS ClassNo
UNION ALL
SELECT '李四' AS Name, 2 AS ClassNo
UNION ALL
SELECT '王五' AS Name, 3 AS ClassNo
UNION ALL
SELECT '趙六' AS Name, NULL AS ClassNo
UNION ALL
SELECT '錢七' AS Name, 4 AS ClassNo
),
temp2 AS
(
SELECT '1' AS ClassNo, '一年級' AS ClassName
UNION ALL
SELECT '2' AS ClassNo, '二年級' AS ClassName
UNION ALL
SELECT '3' AS ClassNo, '三年級' AS ClassName
)
2. left join 之後ON中篩選條件
SELECT * FROM temp1 AS a LEFT JOIN temp2 AS b ON a.ClassNo=b.ClassNo AND a.ClassNo IS NOT NULL;
結果:
Name ClassNo ClassNo ClassName
---- ----------- ------- ---------
張三 1 1 一年級
李四 2 2 二年級
王五 3 3 三年級
趙六 NULL NULL NULL
錢七 4 NULL NULL
- on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄
- 說明:ON是作為join語句的連線條件,這裡是left join 在說明不論ON中的條件是否符合,左表中的所有記錄都會顯示,所以這裡的
a.ClassNo IS NOT NULL
對最終顯示的結果是沒有作用的
3. left join之後使用where連線篩選條件
SELECT * FROM temp1 AS a LEFT JOIN temp2 AS b ON a.ClassNo=b.ClassNo WHERE a.ClassNo IS NOT NULL;
結果:
Name ClassNo ClassNo ClassName
---- ----------- ------- ---------
張三 1 1 一年級
李四 2 2 二年級
王五 3 3 三年級
- where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。