zoukankan      html  css  js  c++  java
  • 深入了解子查询

     1 SELECT DISTINCT soh.OrderDate,sod.ProductID
     2 FROM Sales.SalesOrderHeader soh
     3 LEFT JOIN sales.SalesOrderDetail sod 
     4     ON soh.SalesOrderID =sod.SalesOrderID
     5 WHERE soh.OrderDate =(
     6     SELECT MIN(OrderDate) FROM Sales.SalesOrderHeader)
     7 
     8 --子查询
     9 SELECT e.BusinessEntityID,FirstName,LastName
    10 FROM HumanResources.Employee e
    11 JOIN Person.Person pp
    12     ON e.BusinessEntityID=pp.BusinessEntityID
    13 WHERE e.BusinessEntityID IN 
    14 (SELECT DISTINCT BusinessEntityID FROM HumanResources.JobCandidate)
    15 
    16 --用连接代替子查询 JOIN 默认为INNER JOIN
    17 SELECT e.BusinessEntityID,FirstName,LastName
    18 FROM HumanResources.Employee e
    19 JOIN Person.Person pp
    20     ON e.BusinessEntityID=pp.BusinessEntityID
    21 JOIN HumanResources.JobCandidate jc
    22     ON jc.BusinessEntityID=e.BusinessEntityID
    23 
    24 -- 与NULL值比较总会得到NULL
    25 SELECT e.BusinessEntityID,FirstName,LastName
    26 FROM HumanResources.Employee e
    27 JOIN Person.Person pp
    28     ON e.BusinessEntityID=pp.BusinessEntityID
    29 WHERE e.BusinessEntityID NOT IN 
    30 (SELECT DISTINCT BusinessEntityID FROM HumanResources.JobCandidate 
    31     WHERE BusinessEntityID IS NOT NULL)
    32 
    33 -- WHERE 子句中的相关子查询
    34 --查询每一位客户在系统中的第一份订单的OrderID, OrderDate
    35 /* 使用外面查询中的CustomerID,进行内部查询,得出一个客户的最早订单日期,返回给外部查询*/
    36 
    37 SELECT o1.CustomerID,o1.SalesOrderID,o1.OrderDate
    38 FROM Sales.SalesOrderHeader o1
    39 WHERE o1.OrderDate=(SELECT MIN(o2.OrderDate) 
    40                     FROM Sales.SalesOrderHeader o2
    41                     WHERE o2.CustomerID=o1.CustomerID ) -- 内部查询对外部的引用
    42 ORDER BY o1.CustomerID   
    43 
    44 -- SELECT 子句中的相关子查询
    45 SELECT pp.FirstName,pp.LastName,
    46     (SELECT MIN(OrderDate)
    47         FROM Sales.SalesOrderHeader ord_h
    48         WHERE ord_h.CustomerID=c.CustomerID        
    49     ) AS OrderDate
    50 FROM Person.Person pp
    51 JOIN Sales.Customer c
    52     ON pp.BusinessEntityID=c.PersonID
    53     
    54 -- 派生表 派生表并不能解决所有问题, 结果相当庞大而且有大量记录要联结时,可能要考虑使用临时表并在其上构建索引(派生表没有索引)
    55 -- 查询要求, 查询订过 迷你水泵 又订过 AWC Logo Cap 帽的所有客户
    56 
    57 SELECT DISTINCT    -- DISTINCT 去除重复订购的人
    58         PP.FirstName ,
    59         PP.LastName
    60 FROM    Person.Person AS pp
    61         JOIN ( SELECT   sc.PersonID
    62                FROM     Sales.Customer sc
    63                         JOIN Sales.SalesOrderHeader AS ord_h ON sc.CustomerID = ord_h.CustomerID
    64                         JOIN Sales.SalesOrderDetail AS ord_d ON ord_d.SalesOrderID = ord_h.SalesOrderID
    65                         JOIN Production.Product AS prd ON prd.ProductID = ord_d.ProductID
    66                WHERE    prd.Name = 'Minipump'
    67              ) pumps ON pp.BusinessEntityID = pumps.PersonID
    68         JOIN ( SELECT   sc.PersonID
    69                FROM     Sales.Customer sc
    70                         JOIN Sales.SalesOrderHeader AS ord_h ON sc.CustomerID = ord_h.CustomerID
    71                         JOIN Sales.SalesOrderDetail AS ord_d ON ord_d.SalesOrderID = ord_h.SalesOrderID
    72                         JOIN Production.Product AS prd ON prd.ProductID = ord_d.ProductID
    73                WHERE    prd.Name = 'AWC Logo Cap'
    74              ) caps ON pp.BusinessEntityID = caps.PersonID
    75              
    76 -- Exists 运算符             
    77 SELECT  e.BusinessEntityID ,
    78         FirstName ,
    79         LastName
    80 FROM    HumanResources.Employee e
    81         JOIN Person.Person pp ON e.BusinessEntityID = pp.BusinessEntityID
    82 WHERE   EXISTS ( SELECT BusinessEntityID
    83                  FROM   HumanResources.JobCandidate jc
    84                  WHERE  e.BusinessEntityID = jc.BusinessEntityID )
    85 
    86  
    87 
    88 -- 以上摘自SQL Server 2008 高级程序设计
  • 相关阅读:
    Java(二)
    JS === 关于getElementsByClassName()
    JS === 简易放大镜
    JS === 拖拽盒子
    JS === 实现多个光标跟随事件
    JS === 实现回到顶部
    JS === 实现通过点击td 跳转相应的图片
    final、static关键字
    java面向对象——构造方法
    java面向对象——多态
  • 原文地址:https://www.cnblogs.com/intheway/p/5624922.html
Copyright © 2011-2022 走看看