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

SQL 聯合查詢完整指南:INNER/LEFT/RIGHT/FULL OUTER JOIN 語法與範例

     編輯:關於SqlServer

聯合查詢(JOIN)能高效整合多表資料。本文以兩表 `T1(用戶)`、`T2(積分等級)` 為例,詳細說明四種 JOIN 類型的語法、結果差異與適用場景。

測試資料

T1:用戶表T2:積分等級表
useridusernamepassworduseridjifendengji
1jackjackpwd1203
2owenowenpwd3506

1. 內聯 INNER JOIN

僅回傳**兩表皆符合條件**的列。


SELECT * FROM T1 INNER JOIN T2 ON T1.userid = T2.userid;

結果:1 行(userid=1)。userid=2 在 T2 無對應,userid=3 在 T1 無對應,皆被排除。

2. 左外聯 LEFT OUTER JOIN

回傳 **左表所有列**,右表符合條件者合併,不符合者以 `NULL` 填充。


SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.userid = T2.userid;

結果:2 行。userid=1 合併 T2 資料;userid=2 右側欄位為 NULL。

3. 右外聯 RIGHT OUTER JOIN

回傳 **右表所有列**,左表符合條件者合併,不符合者以 `NULL` 填充。


SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.userid = T2.userid;

結果:2 行。userid=1 合併 T1 資料;userid=3 左側欄位為 NULL。

4. 全外聯 FULL OUTER JOIN

回傳 **兩表所有列**,可對應者合併,無對應者以 `NULL` 填充(等同 LEFT + RIGHT 去重)。


SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.userid = T2.userid;

結果:3 行。userid=1 合併;userid=2 僅 T1;userid=3 僅 T2。

效能與寫法建議

  • 舊式 `WHERE T1.id = T2.id` 等同 `INNER JOIN`,但 **ANSI JOIN 語法(ON 子句)更清晰、優化器更易產生最佳計畫**,建議統一使用。
  • 大表 JOIN 確保連接欄位有索引、資料型別一致。
  • 只需單邊資料時優先用 `LEFT/RIGHT JOIN`,避免 `FULL JOIN` 產生過大中間結果集。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved