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

跨表資料組合全攻略:隱性 JOIN、顯性 JOIN 與子查詢選擇指南

     編輯:關於SqlServer

跨多表查詢時,常困惑於該用哪種語法。本文依 SQL-92 標準,系統說明三大主流方式與選擇準則。

方式一:隱性 JOIN(舊式逗號語法)

SELECT t1.col1, t2.col2
FROM table1 t1, table2 t2
WHERE t1.col1 = t2.col1
  • 本質為 INNER JOIN
  • 多表以逗號分隔,WHERE 指定關聯條件
  • 可用 AND 延伸至多表
  • 缺點:易漏寫關聯條件導致笛卡兒積、最佳化器處理方式不一

方式二:顯性 JOIN(ANSI SQL-92 標準)

SELECT t1.col1, t2.col2
FROM table1 t1 INNER JOIN table2 t2
  ON t1.col1 = t2.col1

五種 JOIN 型態

優勢

  • 關聯條件與過濾條件分離(ON vs WHERE),可讀性高
  • 外部 JOIN 控制精確,避免資料遺失
  • 多表查詢最佳化器通常有更好執行計畫

方式三:子查詢

SELECT col1 FROM table1
WHERE EXISTS (
  SELECT col1 FROM table2
  WHERE table1.col1 = table2.col1
)
  • 常用於 EXISTS/IN/NOT IN 邏輯判斷
  • 可在 SELECT 清單作為標量子查詢回傳單值
  • 效能注意:子查詢會先完整執行再供外層使用,大資料量下較 JOIN 慢

選擇決策樹

  1. 需精確控制外部 JOIN 行為 → 顯性 JOIN
  2. 單純內部關聯、表數少、團隊習慣舊語法 → 隱性 JOIN 可接受
  3. 邏輯為「存在性檢查」或需標量回傳 → 子查詢
  4. 效能優先、大表關聯 → 改寫為 JOIN 並檢視執行計畫

掌握三種語法特性與適用場景,才能寫出正確、高效、可維護的跨表查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型回傳內容
INNER JOIN兩表皆有資料的列
LEFT OUTER JOIN左表所有列 + 右表匹配列(無則 NULL)
RIGHT OUTER JOIN右表所有列 + 左表匹配列
FULL OUTER JOIN兩表所有列,無匹配處填 NULL
CROSS JOIN笛卡兒積(無 ON 條件)