LEFT JOIN 可以用來建立左外部連接,查詢的 SQL 敘述句 LEFT JOIN 左側資料表 (table_name1) 的所有記錄都會加入到查詢結果中,即使右側資料表 (table_name2) 中的連接欄位沒有符合的值也一樣。
相對於 LEFT JOIN,RIGHT JOIN 可以用來建立右外部連接,查詢的 SQL 敘述句 RIGHT JOIN 右側資料表 (table_name2) 的所有記錄都會加入到查詢結果中,即使左側資料表 (table_name1) 中的連接欄位沒有符合的值也一樣。
SELECT table_column1, table_column2...
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
SELECT table_column1, table_column2···
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
有些資料庫的語法會是 LEFT OUTER JOIN ,RIGHT OUTER JOIN。。
客戶資料表(guest)
顧客編號(Primary Key) | 顧客姓名 | 住址 | 電話 |
---|---|---|---|
01 | 李大華 | 桃園 | 09111211 |
02 | 陳大名 | 高雄 | 09232323 |
03 | 陳阿美 | 新北 | 09226541 |
04 | 林大帥 | 桃園 | 09232489 |
訂單資料表(ORDER)
訂單編號(Primary Key) | 顧客編號 | 商品名稱 | 價格 | 日期 |
---|---|---|---|---|
01 | 01 | 漢堡 | 70 | 2021-01-03 |
02 | 02 | 薯條 | 50 | 2021-05-15 |
03 | 04 | 可樂 | 40 | 2021-11-01 |
04 | 04 | 拉麵 | 230 | 2021-12-12 |
05 | 04 | 雞塊 | 50 | 2021-12-12 |
06 | 06 | 饅頭 | 20 | 2021-12-31 |
現在我們想查詢所有客戶與其訂單狀況的資料,我們可以作一個 LEFT JOIN 查詢:
SELECT guest.顧客姓名, ORDER.訂單編號
FROM guest
LEFT JOIN ORDER
ON guest.顧客編號=ORDER.顧客編號;
查詢結果如下:
顧客姓名 | 訂單編號 |
---|---|
李大華 | 01 |
陳大名 | 02 |
陳阿美 | null |
林大帥 | 03 |
林大帥 | 04 |
林大帥 | 05 |
LEFT JOIN 會返回左側資料表中所有資料列,就算沒有符合連接條件,而右側資料表中如果沒有匹配的資料值就會顯示為 NULL。
現在我們想查詢所有訂單與相應的客戶之資料,我們可以作一個 RIGHT JOIN 查詢:
SELECT guest.顧客姓名, ORDER.訂單編號
FROM guest
RIGHT JOIN ORDER
ON guest.顧客編號=ORDER.顧客編號;
查詢結果如下:
顧客姓名 | 訂單編號 |
---|---|
李大華 | 01 |
陳大名 | 02 |
林大帥 | 03 |
林大帥 | 04 |
林大帥 | 05 |
null | 06 |
RIGHT JOIN 會返回右側資料表中所有資料列,就算是沒有符合連接條件,而左側資料表中如果沒有匹配的資料值就會顯示為 NULL。
下篇見