心海恋歌 发表于 2018-10-19 08:07:01

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

是在其他查询结果的基础上提供一种自然而有效的方式表示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>  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>  c)可以返回多行或多列的子查询(事实上是所有的列)使用EXISTS关键字。下面的例子返回与上例相同的结果集:
  Select pub_name from publishers p where exists

  (select * from>
页: [1]
查看完整版本: SQL SERVER2000教程-第五章 处理数据 第十一节 子查询