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 高级程序设计