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;

+----+--------------+---------------------------+-------+---------+ | 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 | +----+--------------+---------------------------+-------+---------+
+-----+---------+-------+------------+ | 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;
輸出結果:

結果解析:
| 特性 | INNER JOIN | LEFT JOIN |
|---|---|---|
| 保留左表無對應列 | 否 | 是(右表欄位為 NULL) |
| 結果筆數 | ≤ 左表筆數 | ≥ 左表筆數 |
| 典型用途 | 只需雙方都有資料的情況 | 需保留主表所有列 |
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 預先縮小範圍。