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

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

     編輯:SQL 基礎

SQL INNER JOIN 內部聯結


INNER JOIN 核心概念

INNER JOIN 僅回傳左右表「都符合」 ON 條件的資料列。若某列在另一表找不到對應資料,該列會被過濾掉。這是最基礎、最常用的聯結類型,也可簡寫為 JOIN。


語法結構

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

等同簡寫:

SELECT column_name(s)
FROM table1
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 |
+-----+---------+-------+------------+

實戰範例

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

輸出結果:

結果解析:

  • 僅回傳有訪問記錄的網站(id=1,2,3,4,5)。
  • id=7 (stackoverflow) 無訪問記錄,完全不出現在結果中。
  • id=1 (Google) 有兩筆記錄,產生兩列;id=3 (菜鳥教程) 有三筆,產生三列。
  • 共 9 列結果,對應 access_log 的 9 筆資料。

INNER JOIN vs LEFT JOIN 關鍵差異

特性INNER JOINLEFT JOIN
保留左表無對應列否是(右表欄位為 NULL)
結果筆數≤ 左表筆數≥ 左表筆數
典型用途只需雙方都有資料的情況需保留主表所有列

進階:多表 INNER JOIN

SELECT o.OrderID, c.CustomerName, p.ProductName, od.Quantity
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
INNER JOIN Products p ON od.ProductID = p.ProductID;

每個 INNER JOIN 逐步縮小結果集,確保所有關聯鏈路完整。


效能優化建議

  • 聯結欄位務必建立索引(主鍵自動、外鍵手動)。
  • 優先在 ON 中使用等值條件(=),避免函數運算。
  • 大表聯結時,考慮先用 WHERE 過濾再聯結,或使用子查詢/CTE 預先縮小範圍。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved