T-SQL 语言基础:集合运算练习

目录

  1. 练习 1: 使用 UNION ALL
  2. 练习 2: 返回特定月份的订单活动
  3. 练习 3: 查找特定月份都有订单活动的客户
  4. 练习 4: 查找特定月份都有订单活动且某年没有订单活动的客户
  5. 练习 5: 保证查询结果的顺序
  6. 总结
  7. 引用
  8. 数据库脚本下载

练习 1: 使用 UNION ALL

SELECT 1 AS n UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7;

输出:

image_alt_text

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/267c02a124154473adae3a8719563c24.jpeg)

练习 2: 返回特定月份的订单活动

返回 2008 年 1 月有订单活动,2008 年 2 月没有订单活动的客户和雇员。

SELECT * FROM Sales.Orders o
LEFT JOIN Sales.Customers c ON c.custid = o.custid
WHERE o.orderdate BETWEEN '20080101' AND '20080131';

输出:55行

image_alt_text

自动去重,自动比对,50 行

SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080101' AND '20080131'
EXCEPT
SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080201' AND '20080229';

输出:

image_alt_text

## 练习 3: 查找特定月份都有订单活动的客户 返回 2008 年 1 月和 2008 年 2 月都有订单活动的客户。
SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080101' AND '20080131'
INTERSECT
SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080201' AND '20080229';

输出:

image_alt_text

练习 4: 查找特定月份都有订单活动且某年没有订单活动的客户

返回 2008 年 1 月和 2008 年 2 月都有订单活动的客户,且 2007 年没有订单活动的客户和雇员。

SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080101' AND '20080131'
INTERSECT
SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20080201' AND '20080229'
EXCEPT
SELECT custid, empid FROM Sales.Orders 
WHERE orderdate BETWEEN '20070101' AND '20071231';

输出:

image_alt_text

练习 5: 保证查询结果的顺序

对以下查询增加逻辑处理,保证 Employees 表返回的行位于 Suppliers 表行的前面。注意:参与集合运算的单个查询不允许带有 ORDER BY 子句。

SELECT country, region, city 
FROM (
    SELECT 1 AS SORTCOL, country, region, city
    FROM HR.Employees
    UNION ALL
    SELECT 2 AS SORTCOL, country, region, city
    FROM Production.Suppliers
) D
ORDER BY SORTCOL, country, region, city;

输出:

image_alt_text

总结

通过这些练习,可以更好地理解和掌握集合运算的实际应用。

引用

数据库脚本下载

TSQLFundamentals2008


**喜欢的话,请收藏 | 关注(✪ω✪)**
……**万一有趣的事还在后头呢,Fight!!(o^-^)~''☆ミ☆ミ**……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值