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

SQL INNER JOIN 完整教學:語法、範例與關鍵行為

     編輯:關於SqlServer

定義

INNER JOIN(內部連接)在兩張表之間依指定欄位進行匹配,**僅回傳雙方都有匹配值的列**。若某列在另一表無對應資料,該列不會出現在結果集中。`INNER JOIN` 與 `JOIN` 同義。

標準語法

SELECT 表1.欄位1, 表1.欄位2, 表2.欄位3
FROM 表1
INNER JOIN 表2
ON 表1.關聯欄位 = 表2.關聯欄位
[WHERE 篩選條件]
[ORDER BY 排序欄位];

範例資料

Persons 表

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

Orders 表

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

實戰查詢:列出所有人的訂單

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName;

結果集

LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678

關鍵觀察

  • Bush (Id_P=2) 在 Persons 存在,但 Orders 無對應記錄 → **不出現在結果**。
  • Orders 中 Id_P=65 無對應 Persons → **不出現在結果**。
  • Adams 有兩筆訂單 → **輸出兩列**(一對多關係)。

進階提示

  1. 別名簡化:`FROM Persons p INNER JOIN Orders o ON p.Id_P = o.Id_P`
  2. 多表連接:依序 `INNER JOIN` 多張表,每個 `ON` 指定對應關係。
  3. 效能:確保關聯欄位有索引;大表驅動小表時考慮 `WHERE` 先過濾。
  4. 避免隱式轉換:關聯欄位資料型別、定序一致,否則索引失效。

對比:LEFT JOIN vs INNER JOIN

若需保留 Persons 所有列(無訂單者顯示 NULL),改用 LEFT JOIN。`INNER JOIN` 嚴格要求雙邊匹配,語義更精確、結果集更小、執行計劃通常更優。

小結

`INNER JOIN` 是關聯查詢的基石。掌握「僅匹配列輸出」的語義、正確建立索引、善用別名與多表鏈接,是寫出高效 SQL 的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved