在MySQL中,LEFT JOIN和RIGHT JOIN是兩種常用的聯結方式。左聯(LEFT JOIN)和右聯(RIGHT JOIN)都屬于外部鏈接(outer join),可以聯結兩張表中沒有匹配數據的行。
下面我們來看兩個簡單的例子:一個是左聯的案例,一個是右聯的案例。
左聯案例
SELECT * FROM orders LEFT JOIN customers ON orders.customer_id = customers.customer_id;
上述SQL語句將orders表和customers表左聯,結果集中將包含orders表中所有的行,而customers表中與orders表匹配的行將被合并。
假設orders表中包含以下記錄:
order_id | customer_id | order_date ------------------------------------ 1 | 1 | 2019-01-01 2 | 2 | 2019-01-02 3 | NULL | 2019-01-03
customers表中包含以下記錄:
customer_id | customer_name --------------------------- 1 | Alice 2 | Bob
則左聯查詢的結果為:
order_id | customer_id | order_date | customer_name ----------------------------------------------------- 1 | 1 | 2019-01-01 | Alice 2 | 2 | 2019-01-02 | Bob 3 | NULL | 2019-01-03 | NULL
上述結果集中包含了orders表中所有的行,但是第三行記錄由于customer_id為NULL,在customers表中沒有匹配的行,因此customer_name也為NULL。
右聯案例
SELECT * FROM orders RIGHT JOIN customers ON orders.customer_id = customers.customer_id;
上述SQL語句將orders表和customers表右聯,結果集中將包含customers表中所有的行,而orders表中與customers表匹配的行將被合并。
假設orders表和customers表中的記錄同上,則右聯查詢的結果為:
order_id | customer_id | order_date | customer_name ----------------------------------------------------- 1 | 1 | 2019-01-01 | Alice 2 | 2 | 2019-01-02 | Bob NULL | 3 | NULL | Charlie
上述結果集中包含了customers表中所有的行,但是第三行記錄由于customer_id為3,在orders表中沒有匹配的行,因此order_id和order_date也為NULL。