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

SQL Server 連接查詢全解析:內連接、外連接、交叉連接實戰

     編輯:關於SqlServer

連接查詢核心概念

連接是關聯式資料庫的核心特徵。透過連接運算子,可從多張表組合出完整資訊。SQL-92 標準建議在 FROM 子句指定連接,分離連接邏輯與篩選條件。

標準語法

FROM join_table join_type join_table [ON (join_condition)]
  • join_table:參與連接的表(可為同一表 → 自連接)
  • join_type:內連接、外連接、交叉連接
  • ON:連接條件(欄位、比較/邏輯運算子)

限制:text/ntext/image 型別不可直接連接,需轉換(如 DATALENGTH())間接比較。

三大連接類型詳解

1. 內連接

僅回傳符合連接條件的匹配行。

  • 等值連接:= 比較,結果含重複欄位
  • 自然連接:= 比較 + 選擇清單移除重複欄位
  • 不等連接:>, >=, <, <=, <>, !>, !<

範例:同城市作者與出版社

-- 等值連接
SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city;

-- 自然連接(移除重複 city, state)
SELECT a.*, p.pub_id, p.pub_name, p.country 
FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city;

2. 外連接

除匹配行外,保留單邊或雙邊所有行,無匹配處以 NULL 填補。

左外連接 (LEFT JOIN)

以左表為基準,保留左表所有行。

SELECT field1, field2 
FROM table1 LEFT JOIN table2 ON table1.field1 = table2.field2
WHERE table1.field3 = table2.field3;

右外連接 (RIGHT JOIN)

以右表為基準,保留右表所有行。語法對稱。

全外連接 (FULL JOIN)

保留雙邊所有行。

3. 交叉連接

無 WHERE 條件,回傳笛卡爾積:結果行數 = 左表行數 × 右表行數。

-- 6 類圖書 × 8 家出版社 = 48 行
SELECT type, pub_name FROM titles CROSS JOIN publishers ORDER BY type;

間接連接大物件型別

SELECT p1.pub_id, p2.pub_id, p1.pr_info 
FROM pub_info AS p1 INNER JOIN pub_info AS p2 
ON DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info);

選擇指南

需求推薦連接
只需雙方都有的資料INNER JOIN
保留主表所有資料,附帶從表資料LEFT JOIN
保留從表所有資料,附帶主表資料RIGHT JOIN
保留雙方所有資料FULL JOIN
組合所有排列組合CROSS JOIN

效能提示

  • 連接欄位務必建立索引
  • 小表驅動大表(LEFT JOIN 時小表放左邊)
  • 避免在 ON 條件中對欄位做函數運算
  • 優先用 ANSI-92 FROM ... JOIN ... ON 語法,可讀性與維護性最佳

熟練掌握三種連接類型與適用場景,是寫出高效、正確 SQL 的基石。

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