SQLServer2012聯接查詢練習

表結構與數據:https://github.com/XuePeng87/TSQLV4git

練習1

練習內容:編寫一個查詢,爲每一個僱員生成5個副本
涉及的表:HR.Employees, dbo.Nums
輸出的列:empid, firstname, lastname, n
正確結果:45行
SELECT E.empid, E.firstname, E.lastname, N.n 
FROM dbo.Nums AS N 
	CROSS JOIN HR.Employees AS E 
WHERE N.n < 6 ORDER BY N.n, E.empid;
練習內容:編寫一個查詢,每一個僱員返回一行,而且日期在2015年6月12日到2015年6月16日範圍內
涉及的表:HR.Employees, dbo.Nums
輸出的列:empid, dt
正確結果:45行
SELECT E.empid, DATEADD(day, N.n - 1, '20150612') AS dt  
FROM HR.Employees AS E 
	CROSS JOIN dbo.Nums N 
WHERE N <= DATEDIFF(day, '20150612', '20150616') + 1
ORDER BY E.empid, dt;

練習2

練習內容:返回美國客戶,併爲每一個客戶返回訂單總數和總數量
涉及的表:Sales.Customers, Sales.Orders, Sales.OrderDetails
輸出的列:custid, numorders, totalqty
正確結果:13行
SELECT C.custid, COUNT(DISTINCT O.orderid) AS numorders, SUM(OD.qty) AS totalqty 
FROM Sales.Customers C 
	JOIN Sales.Orders O ON O.custid = C.custid 
	JOIN Sales.OrderDetails OD ON OD.orderid = O.orderid 
WHERE C.country = N'USA' 
GROUP BY C.custid;

練習3

練習內容:返回客戶及其訂單,包括沒有下訂單的客戶
涉及的表:Sales.Customers, Sales.Orders
輸出的列:custid, companyname, orderid, orderdate
正確結果:832行
SELECT C.custid, C.companyname, O.orderid, O.orderdate  
FROM Sales.Customers C 
	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid;

練習4

練習內容:返回沒有下訂單的客戶
涉及的表:Sales.Customers, Sales.Orders
輸出的列:custid, companyname
正確結果:2行
SELECT C.custid, C.companyname 
FROM Sales.Customers C 
	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid
WHERE O.orderid IS NULL;

練習5

練習內容:返回2015年2月12日下訂單的客戶,以及他們的訂單
涉及的表:Sales.Customers, Sales.Orders
輸出的列:custid, companyname, orderid, orderdate
正確結果:2行
SELECT C.custid, C.companyname, O.orderid, O.orderdate  
FROM Sales.Customers C 
	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid
WHERE O.orderdate = '20150212'

練習6

練習內容:返回2015年2月12日下訂單的客戶,以及他們的訂單。此外,還返回這一天沒有下訂單的客戶
涉及的表:Sales.Customers, Sales.Orders
輸出的列:custid, companyname, orderid, orderdate
正確結果:91行
SELECT C.custid, C.companyname, O.orderid, O.orderdate  
FROM Sales.Customers C 
	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid AND O.orderdate = '20150212'

練習7

練習內容:返回全部客戶與,並基於客戶在2015年2月12日是否有訂單爲其返回Yes/No值
涉及的表:Sales.Customers, Sales.Orders
輸出的列:custid, companyname, HasOrderOn20150212
正確結果:91行
SELECT C.custid, C.companyname, 
	CASE WHEN O.orderid IS NULL THEN 'No'
	ELSE 'Yes' END AS HasOrderOn20150212
FROM Sales.Customers C 
	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid AND O.orderdate = '20150212'
相關文章
相關標籤/搜索