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

SQL 循序漸進 (23):UNION 合併查詢與 OUTER JOIN 外部聯結

     編輯:關於SqlServer

UNION:合併多查詢結果

將兩個 SELECT 結果集合併,自動去除重複列(單一查詢需用 DISTINCT)。

SELECT BUYERID FROM ANTIQUEOWNERS
UNION
SELECT OWNERID FROM ORDERS;

限制:兩查詢欄位數量、順序、資料型別必須相容(例:BUYERID 與 OWNERID 皆為 INTEGER)。

OUTER JOIN:保留無對應列的外部聯結

一般 JOIN(INNER JOIN)僅回傳雙方皆有對應的列。OUTER JOIN 可保留單方無對應的列,常搭配常數旗標說明來源。

範例:列出所有擁有者並標記來源

SELECT OWNERID, 'is in both Orders & Antiques'
FROM ORDERS, ANTIQUES
WHERE OWNERID = BUYERID
UNION
SELECT BUYERID, 'is in Antiques only'
FROM ANTIQUES
WHERE BUYERID NOT IN (SELECT OWNERID FROM ORDERS);
  • 第一查詢:內部聯結取得雙方皆有的擁有者,附加旗標
  • 第二查詢:僅在 ANTIQUES 出現的擁有者,附加不同旗標
  • UNION 合併 → 完整清單含來源標記

外部聯結實務意義

主鍵-外鍵關係中,外鍵端可能為 NULL(如業務員無客戶)。若需列出所有業務員(含無客戶者),必須使用 OUTER JOIN。

  • LEFT OUTER JOIN:保留左表所有列
  • RIGHT OUTER JOIN:保留右表所有列
  • FULL OUTER JOIN:保留雙方所有列

標準 SQL-92 語法:

SELECT s.name, c.name
FROM salesperson s
LEFT OUTER JOIN customer c ON s.id = c.salesperson_id;

總結

  • UNION 合併結果、自動去重、欄位結構必須一致
  • 外部聯結解決「主表資料在從表無對應」的查詢需求
  • 實務常搭配旗標欄位區分資料來源
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved