您的位置:首页 > 数据库

SQL SERVER2000教程-第五章 处理数据 第十一节 子查询

2007-10-01 13:47 381 查看


是在其他查询结果的基础上提供一种自然而有效的方式表示WHERE子句的条件。
子查询是一个SELECT语句,它定义在另一个SELECT、INSERT、UPDATE或DELETE语句中或定义在另一个子查询中。
子查询会受到一定限制规则。这些规则为:
1)子查询的选择列表中不能包括文本或图像数据类型。
2)由未修改的比较运算符(不跟有ANY或ALL关键字的一种运算符)引入的子查询不能包括GROUP BY和HAVING子句,因
为这些子查询必须返回单一值。
3)包含GROUP BY子句的子查询不能使用DISTINCT关键字。
4)由比较运算符引入的子查询的选择列表中只能包含一个表达式或一个列名。
5)子查询不能内部地处理它们自己的结果,因为它们不能包含COMPUTE子句、ORDER BY子句或INTO关键字。因为系统
首先通过排序结果消除重复的记录,所以可选的DISTINCT关键字可对不包含GROUP BY 子句的子查询的结果进行有
效排序。
6)使用EXISTS的子查询的选择列表规则等同于那些标准选择列表规则,这是因为使用EXISTS的子查询构成了一个存在
性测试,并且它返回TURE(真)或FALSE(假)值而非数据值。根据惯例,使用EXISTS的子查询的选择列表由有星
号(*)构成而不是单个列名。不要指定多个列。
实例:
a)子查询只返回一行和一列。
Use pubs
go
Select title from titles where pub_id=(
select pub_id from publishers where pub_name='Binnet & Hardley')
b)可以使用 IN运算符来操作返回一列或多行的子查询。
Select pub_name from publishers where pub_id in (select pub_id from titles where type='business')
c)可以返回多行或多列的子查询(事实上是所有的列)使用EXISTS关键字。下面的例子返回与上例相同的结果集:
Select pub_name from publishers p where exists
(select * from titles t where p.pub_id=t.pub_id and type='business')

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐