首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL RIGHT JOIN 完整教學:右外部聯結語法、視覺化與實戰範例

     編輯:SQL 基礎

SQL RIGHT JOIN 右外部聯結


RIGHT JOIN 核心概念

RIGHT JOIN(或 RIGHT OUTER JOIN)回傳右表(table2)所有資料列,並嘗試依 ON 條件比對左表(table1)。右表每一列都會出現在結果中;若左表無對應資料,左表欄位顯示 NULL。


語法結構

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

等同寫法:

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;


演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow| https://stackoverflow.com/ | 0     | IND     |
+----+--------------+---------------------------+-------+---------+

access_log 表

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
| 1   | 1       | 45    | 2016-05-10 |
| 2   | 3       | 100   | 2016-05-13 |
| 3   | 1       | 230   | 2016-05-14 |
| 4   | 2       | 10    | 2016-05-14 |
| 5   | 5       | 205   | 2016-05-14 |
| 6   | 4       | 13    | 2016-05-15 |
| 7   | 3       | 220   | 2016-05-15 |
| 8   | 5       | 545   | 2016-05-16 |
| 9   | 3       | 201   | 2016-05-17 |
+-----+---------+-------+------------+

實戰範例

本範例將 access_log 作為左表,Websites 作為右表,展示 RIGHT JOIN 效果:

SELECT Websites.name, access_log.count, access_log.date
FROM access_log
RIGHT JOIN Websites
ON access_log.site_id = Websites.id
ORDER BY access_log.count DESC;

輸出結果:

結果解析:

  • 右表 Websites 所有 6 筆資料皆出現。
  • id=7 (stackoverflow) 在 access_log 無對應,count/date 為 NULL。
  • access_log 中 site_id=1,2,3,4,5 皆有對應網站,正常顯示。

RIGHT JOIN vs LEFT JOIN 選擇指南

情境建議用法
以「主表」為基準,帶出明細表資料主表 LEFT JOIN 明細表(直覺較自然)
SQL 產生器自動生成、或右表為核心RIGHT JOIN 可讀性較佳
需同時保留雙邊所有資料FULL OUTER JOIN

實務建議:團隊內統一使用 LEFT JOIN,將「保留哪一邊」語意寫在左側,減少認知負擔。


適用場景

  • 以「參考表」為主,檢查「事實表」是否有對應資料(如:所有商品類別 RIGHT JOIN 商品表,找出無商品的類別)。
  • 報表需求:右側清單為固定維度,左側為變動事實。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved