替代方法 2

改進 SQL Server 中的查詢效能

Dean Smith

Founder, Atamai Analytics

INNER JOIN

SELECT c.CustomerID
      ,c.CompanyName
      ,o.OrderID
      ,o.OrderDate
      ,o.ShippedDate
      ,o.Freight
FROM Customers c
INNER JOIN Orders o
    ON c.CustomerID = o.CustomerID
CustomerID CompanyName OrderID ...
VINET Vins et alcools Chevalier 10248 ...
HANAR Hanari Carnes 10250 ...
VICTE Victuailles en stock 10251 ...
SUPRD Suprêmes délices 10252 ...
... ... ... ...
改進 SQL Server 中的查詢效能

LEFT OUTER JOIN

包含 LEFT OUTER JOIN

凡恩圖:包含型 Left Outer Join

排除 LEFT OUTER JOIN

凡恩圖:排除型 Left Outer Join

改進 SQL Server 中的查詢效能

排除型 LEFT OUTER JOIN

SELECT c.CustomerID
      ,c.CompanyName
      ,o.OrderID
      ,o.OrderDate
      ,o.ShippedDate
      ,o.Freight
FROM Customers c
LEFT OUTER JOIN Orders o
    ON c.CustomerID = o.CustomerID
WHERE o.CustomerID IS NULL
CustomerID CompanyName OrderID ...
FISSA FISSA Fabrica Inter. Salchichas S.A. NULL ...
PARIS Paris spécialités NULL ...
改進 SQL Server 中的查詢效能

複習:INTERSECT 與 EXCEPT

INTERSECT:檢查是否存在

EXCEPT:檢查是否不存在

優點

  • 適合探索資料
  • 會移除回傳結果中的重複值

缺點

  • 兩個查詢的 SELECT 欄位數量與順序必須相同
改進 SQL Server 中的查詢效能

複習:EXISTS 與 NOT EXISTS

EXISTS:檢查是否存在

NOT EXISTS:檢查是否不存在

優點

  • 子查詢一旦評估為 TRUE 就會停止搜尋
  • 結果可包含外層查詢的任意欄位,順序不限

缺點

  • 結果只能包含外層查詢的欄位
改進 SQL Server 中的查詢效能

複習:IN 與 NOT IN

IN:檢查是否存在

NOT IN:檢查是否不存在

優點

  • 結果可包含外層查詢的任意欄位,順序不限

缺點

  • 結果只能包含外層查詢的欄位
  • 由於 NOT IN 對子查詢中的 null 處理方式,可能不回傳任何結果
改進 SQL Server 中的查詢效能

複習:INNER JOIN 與排除型 L.O.J

INNER JOIN:檢查是否存在

排除型 LEFT OUTER JOIN:檢查是否不存在

優點

  • 結果可包含所有連接查詢中的任意欄位,順序不限

缺點

  • 使用排除型 LEFT OUTER JOIN 時需在 WHERE 加上 IS NULL 篩選條件
改進 SQL Server 中的查詢效能

一起來練習吧!

改進 SQL Server 中的查詢效能

Preparing Video For Download...