第4章 子查询

4.2.1 Exist 谓语:

use TSQLFundamentals2008
select *
from Sales.Customers as C
where c.country=N'Spain' select *
from Sales.Customers as C
where c.country=N'Spain' and exists(select * from Sales.Orders as O where o.custid=C.custid) select *
from Sales.Customers as C
where c.country=N'Spain' and not exists(select * from Sales.Orders as O where o.custid=C.custid)

4.3.2 连续聚和

select OBJECT_ID('Sales.OrderTotalsByYear')
if OBJECT_ID('Sales.OrderTotalsByYear') is not null drop view Sales.OrderTotalsByYear go
create view Sales.OrderTotalsByYear with schemabinding
as
select
YEAR(o.orderdate) as orderyear,
SUM(od.qty) as qty
from
Sales.Orders as o
join Sales.OrderDetails as od on o.orderid=od.orderid
group by YEAR(o.orderdate)
go

查询:

select O1.orderyear, o1.qty,
(select SUM(o2.qty) from
Sales.OrderTotalsByYear as o2
where o2.orderyear <= o1.orderyear
) as runqty
from Sales.OrderTotalsByYear as O1
order by o1.orderyear

4.3.3 行为不当的子查询

SELECT custid, companyname
FROM Sales.Customers AS C
WHERE custid NOT IN(SELECT O.custid
FROM Sales.Orders AS O);

返回:

custid   companyname
22        Customer DTDMN
57        Customer WVAXS

插入一条custid=NULL的记录:

INSERT INTO Sales.Orders
(custid, empid, orderdate, requireddate, shippeddate, shipperid,
freight, shipname, shipaddress, shipcity, shipregion,
shippostalcode, shipcountry)
VALUES(NULL, 1, '', '',
'', 1, 123.00, N'abc', N'abc', N'abc',
N'abc', N'abc', N'abc');
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE custid NOT IN(SELECT O.custid
FROM Sales.Orders AS O);

返回0行

原因:

NOT(22=1 Or 22=2 Or 22=NULL)

NOT(False or False Or UnKnown)

NOT UnKnow

Unknow

查询条件过滤UnKnown

而:

SELECT custid, companyname
FROM Sales.Customers AS C
WHERE not exists (SELECT *
FROM Sales.Orders AS O where C.custid=O.custid);

SELECT custid, companyname
FROM Sales.Customers AS C
WHERE custid NOT IN(SELECT O.custid
FROM Sales.Orders AS O where O.custid is NOT null);

返回:

custid   companyname
22        Customer DTDMN
57        Customer WVAXS

最新文章

  1. C#设计模式-访问者模式
  2. javascript关于立即函数
  3. shell循环语句
  4. C语言获取时间
  5. 响应式web设计之CSS3 Media Queries
  6. ajax的再次封装!
  7. 数据存储与IO(二)
  8. linux文档常见后缀名
  9. 将数组里的元素拼接成sql里的in条件
  10. 20个很有用的PHP类库
  11. 在Unity项目中使用Git
  12. C#动态二维数组输出
  13. 感知哈希算法 python 3.4
  14. 安利一款强大的学习软件XMind(顺便放上这几天制作的JavaSE的思维导图day1-day4)
  15. redis conf 中文详解
  16. windows服务中对外提供API接口
  17. 利用Qt开发跨平台APP
  18. Linux显示不了中文
  19. Spark的集群管理器
  20. [leetcode] 2. Pascal&#39;s Triangle II

热门文章

  1. JavaScript 页面间传值
  2. pageContext对象的用法详述
  3. bzoj1577 [Usaco2009 Feb]庙会捷运Fair Shuttle
  4. 汕头市队赛 SRM16
  5. 【洛谷 P1651】 塔 (差值DP)
  6. SELinux 案例 1
  7. inno setup 5 添加快捷方式默认选中
  8. 常见协议基础知识总结--FTP协议
  9. SpringMVC与Spring的父子容器关系
  10. HDU-3374