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

SQL JOIN 實戰範例詳解:建表、資料與五大聯接類型輸出對照

     編輯:關於SqlServer

範例資料準備

CREATE TABLE Table1 (id INT, name VARCHAR(10));
CREATE TABLE Table2 (id INT, score INT);

INSERT INTO Table1 VALUES (1, 'Lee'), (2, 'Zhang'), (4, 'Wang');
INSERT INTO Table2 VALUES (1, 90), (2, 100), (3, 70);

資料內容:

Table1Table2
idnameidscore
1Lee190
2Zhang2100
4Wang370

五大聯接實測結果

1. 左外聯接 (LEFT JOIN)

SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id = Table2.id;
idnameidscore
1Lee190
2Zhang2100
4WangNULLNULL

→ 保留 Table1 全部 3 列,Table2 無對應者為 NULL。

2. 右外聯接 (RIGHT JOIN)

SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.id = Table2.id;
idnameidscore
1Lee190
2Zhang2100
NULLNULL370

→ 保留 Table2 全部 3 列,Table1 無對應者為 NULL。

3. 完整外聯接 (FULL JOIN)

SELECT * FROM Table1 FULL JOIN Table2 ON Table1.id = Table2.id;
idnameidscore
1Lee190
2Zhang2100
4WangNULLNULL
NULLNULL370

→ 兩表聯集,無對應雙邊 NULL。

4. 內聯接 (INNER JOIN / JOIN)

SELECT * FROM Table1 JOIN Table2 ON Table1.id = Table2.id;
idnameidscore
1Lee190
2Zhang2100

→ 僅保留雙方皆有對應的 2 列 (id=1,2)。

5. 交叉聯接 (CROSS JOIN)

SELECT * FROM Table1 CROSS JOIN Table2;
idnameidscore
1Lee190
1Lee2100
1Lee370
2Zhang190
2Zhang2100
2Zhang370
4Wang190
4Wang2100
4Wang370

→ 3 × 3 = 9 列笛卡爾積。

等價寫法對照

標準 JOIN舊式 WHERECROSS JOIN + WHERE
JOIN ... ONFROM A,B WHERE A.id=B.idCROSS JOIN ... WHERE A.id=B.id
內聯接內聯接內聯接 (僅支援 WHERE)

關鍵觀察

  • LEFT JOIN 最常用 (主表帶明細),RIGHT JOIN 可改寫為交換表順序的 LEFT JOIN。
  • FULL JOIN 適用雙向差異比對 (如對帳)。
  • CROSS JOIN 極少直接用於業務,注意避免誤寫成無條件 CROSS JOIN 導致效能災難。

結語

透過具體資料與輸出對照,直觀理解五大 JOIN 行為差異。實務開發建議:預設用 LEFT JOIN,僅在確定雙方必有資料時用 INNER JOIN,特殊比對需求用 FULL JOIN,謹慎使用 CROSS JOIN。

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