iT邦幫忙

2021 iThome 鐵人賽

DAY 16
1
自我挑戰組

菜鳥大學生資料庫學習記系列 第 16

Day 16 -資料查詢語言 LEFT JOIN 和 RIGHT JOIN!

  • 分享至 

  • xImage
  •  

LEFT JOIN 可以用來建立左外部連接,查詢的 SQL 敘述句 LEFT JOIN 左側資料表 (table_name1) 的所有記錄都會加入到查詢結果中,即使右側資料表 (table_name2) 中的連接欄位沒有符合的值也一樣。
相對於 LEFT JOIN,RIGHT JOIN 可以用來建立右外部連接,查詢的 SQL 敘述句 RIGHT JOIN 右側資料表 (table_name2) 的所有記錄都會加入到查詢結果中,即使左側資料表 (table_name1) 中的連接欄位沒有符合的值也一樣。

LEFT JOIN 語法 和 RIGHT JOIN 語法

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。。

LEFT JOIN 和 RIGHT 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。
下篇見


上一篇
Day 15 -資料查詢語言 INNER JOIN!
下一篇
Day 17 -資料查詢語言 CASE 關鍵字!
系列文
菜鳥大學生資料庫學習記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
shibainu274
iT邦新手 5 級 ‧ 2021-09-30 23:42:05

林不帥

衛斯理 iT邦新手 5 級 ‧ 2021-09-30 23:48:29 檢舉

是林大帥

我要留言

立即登入留言