第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

学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章的更多相关文章

  1. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础

    第 2 章: 单表查询 use TSQLFundamentals2008; select * from Sales.orders; select empid, year(orderdate) as o ...

  2. 《microsoft sql server 2008技术内幕 t-sql语言基础》

    第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...

  3. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  4. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  5. 2008技术内幕:T-SQL语言基础 联接查询摘记

    续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...

  6. 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法

    关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...

  7. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  8. SQL Server 2008 R2升级到SQL Server 2012 SP1

    1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的S ...

  9. 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决

    Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...

随机推荐

  1. hive的体系架构及安装

    1,什么是Hive? Hive是能够用类SQL的方式操作HDFS里面数据一个数据仓库的框架,这个类SQL我们称之为HQL(Hive Query Language) 2,什么是数据仓库? 存放数据的地方 ...

  2. 【hdu1251-统计难题】Trie

    http://acm.hust.edu.cn/vjudge/problem/16379 题意:给定多个单词,多次询问符合某前缀的单词有多少个. 题解:tire.数组开了5*10^6才A,不然就RE. ...

  3. 【Foreign】无聊的计算姬 [Lucas][BSGS]

    无聊的计算姬 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input 6 2 2 3 4 3 2 ...

  4. 【BZOJ2253】纸箱堆叠 [CDQ分治]

    纸箱堆叠 Time Limit: 30 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description P 工厂是一个生产纸箱的工厂. 纸 ...

  5. bzoj2442&&codevs4654 单调队列优化dp

    这道题也是一道单调队列 很明显满足各种性质 f[i]表示i不选前面k-1个都选的最小损失 维护的是个单增队列 q[head]是队列最小值 代码十分简介 注意longlong就okay #include ...

  6. python 读 excel 模块: xlrd

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  7. ie6浏览器兼容性

    1.ie6双倍边距bug 块状元素设置float(左浮动或有浮动),并且设置margin值之后,第一个浮动的元素其左侧margin值为正常的2倍,如图,可以看到第一个元素的左侧边距于其他元素两两之间的 ...

  8. LeetCode 5:Given an input string, reverse the string word by word.

    problem: Given an input string, reverse the string word by word. For example: Given s = "the sk ...

  9. Manipulating Files

    http://linuxcommand.org/lc3_lts0050.php This lesson will introduce you to the following commands: cp ...

  10. [Shell] shell 脚本循环恢复的问题

    在一个shell脚本中,我大概执行了如下一个脚本: ...} do ...} do ...} do done done done 假设上面的sleep 10秒就是代表我的程序需要执行10秒之久.而现在 ...