博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLServer2012联接查询练习
阅读量:6572 次
发布时间:2019-06-24

本文共 2365 字,大约阅读时间需要 7 分钟。

hot3.png

表结构与数据:

练习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') + 1ORDER 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.custidWHERE 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.custidWHERE 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 HasOrderOn20150212FROM Sales.Customers C 	LEFT OUTER JOIN Sales.Orders O ON O.custid = C.custid AND O.orderdate = '20150212'

 

转载于:https://my.oschina.net/u/2981366/blog/777459

你可能感兴趣的文章
PHP的语言构造器
查看>>
mysql5.6.25及以上下载衔接
查看>>
Node+fs+定时器(node-schedule)+MySql
查看>>
Eclipse环境安装Python插件PyDev
查看>>
【IOS-COCOS2D游戏开发之十九】游戏数据存储的四种常用方式NSKEYEDARCHIVER/NSUSERDEFAULTS/WRITE写入/SQLITE3...
查看>>
git 常用命令
查看>>
logging 日志表的设计
查看>>
sed 常见用法
查看>>
很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天做个demo(续集)...
查看>>
mysql 常用操作(整理)
查看>>
Java 网络教程: ServerSocket
查看>>
解决NSTextContainer分页时文本截断问题
查看>>
Android被逼学习小例子1
查看>>
x265探索与研究(一):x265下载安装与配置
查看>>
Solr常用查询语法笔记
查看>>
【物联网】QCA4010开发环境搭建(二)(解决WIN10下不能驱动问题)
查看>>
Swift中的数组
查看>>
[翻译] AnchoredFloatView
查看>>
zookeeper分布式锁避免羊群效应(Herd Effect)
查看>>
虚拟化平台cloudstack(7)——新版本的调试
查看>>