SQL练习题--某书第三章联结

 

#1. 为每个雇员行生成5个副本 
SELECT E.empid,E.firstname,E.lastname,N.n
  FROM HR.Employees AS E
 CROSS JOIN dbo.Nums AS N
 WHERE N.n <=5
 ORDER BY n,empid;
 
#2. 返回美国客户,并为每个客户返回订单总数的总数量->

SELECT c.custid,
	   COUNT(DISTINCT o.orderid) AS numorders
       SUM(d.qty) AS totalqty
  FROM Sales.Customers c
  JOIN Sales.Orders o
    ON c.custid = o.custid
  JOIN Sales.OrderDetails d
    ON o.orderid = d.orderid
 WHERE c.country = 'USA'
  GROUP BY c.custid;
  
#3. 返回客户及其订单 包括没有下订单的客户 
SELECT c.customers,
       c.companyname,
	   o.orderid,
       o.orderdate
  FROM Sales.Customers c
  LEFT JOIN Sales.Orders o
    ON c.custid = o.custid;

#4. 返回没有下订单的客户 
SELECT c.customers,
       c.companyname
  FROM Sales.Customers c
  LEFT JOIN Sales.Orders o
    ON c.custid = o.custid
 WHERE o.orderid IS NULL;
 
#5. 返回2007年2月12日下订单的客户以及他们的订单alter
SELECT c.customers,
       c.companyname,
	   o.orderid,
       o.orderdate
  FROM Sales.Customers c
  JOIN Sales.Orders o
    ON c.custid = o.custid
  WHERE o.orderdate = '2007-02-12'
  
#6. 返回20070212下订单的客户订单还有没下订单的客户订单

SELECT c.customers,
       c.companyname,
	   o.orderid,
       o.orderdate
  FROM Sales.Customers c
  JOIN Sales.Orders o
    ON c.custid = o.custid
  WHERE o.orderdate = '2007-02-12'
UNOIN
SELECT c.customers,
       c.companyname,
	   o.orderid,
       o.orderdate
  FROM Sales.Customers c
  LEFT JOIN Sales.Orders o
    ON c.custid = o.custid
 WHERE o.orderid IS NULL;
 
 ############答案的做法(把订单日期看做是匹配条件!)
 ############这个时候比较麻烦的是当客户没有订单时在第二个表的日期是NULL,
 ############所以要么用ON+日期(首选),要么就两个表合并
 SELECT c.custid,c.companyname,o.orderid,o.orderdate
   FROM Sales.Customers AS c
   LEFT JOIN Sales.Orders AS o
     ON o.custid = c.custid
	AND o.orderdate = '20070212'
    
# 7.还是要用 
SELECT c.customers,
       c.companyname,
       CASE WHEN o.orderid IS NULL THEN 'NO'
       ELSE 'YES'
        END AS HashOrderOn70212
  FROM Sales.Customers c
  LEFT JOIN Sales.Orders o
    ON c.custid = o.custid
    AND o.orderdate = '2007-02-12'

重点:第6+7题

猜你喜欢

转载自blog.csdn.net/kylin_learn/article/details/89277829