TSQL技巧(一) -- 子查询(subquery)

子查询分为独立子查询和相关子查询

什么时候该利用子查询,我们可以先来看下面几个实际的例子。

 

我们以Northwind数据库为例

 

1. 返回在每月最后实际订单日期发生的订单(独立子查询)

   思路:由于每个月最后实际订单最后一天是唯一的,所以我们

            可以利用内层查询分组来实现。

SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate 
FROM dbo.Orders
WHERE OrderDate  IN
  ( SELECT  MAX(OrderDate) 
    FROM dbo.Orders
    GROUP  BY EmployeeID)

 

2. 为每个员工返回具有最大OrderDate的订单(相关子查询)

   思路:这个问题不能再采用上面相同的策略了,因为几个员工可能会具有相同的订单日期,所以Max(OrderDate)

           可能返回员工A的,也可能是员工B的。

           那么,如何才能让最大订单日期定位到某个员工呢?

           这个时候,我们必须利用到相关子查询,唯一的办法就是将内部查询的EmployeeID与

           外部查询的EmployeeID匹配。

SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate 
FROM dbo.Orders  AS O1
WHERE OrderDate  =
  ( SELECT  MAX(OrderDate)
    FROM dbo.Orders  AS O2
    WHERE O2.EmployeeID  = O1.EmployeeID)

 

 

 

 

你可能感兴趣的:(query)