替代方法 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(左外连接)

维恩图 排他型左外连接

改进 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 中的查询性能

Vamos praticar!

改进 SQL Server 中的查询性能

Preparing Video For Download...