子查询

来源:互联网 发布:淘宝迅雷会员1分钱 编辑:程序博客网 时间:2024/06/09 16:41

大家好,我今天给大家讲一下,我学习子查询的一些心得体会。因为我觉得,子查询,非常重要,所以我把它单独拿来说,因为子查询可以用到很多的地方。例如:SELECT、INSERT 、UPDATE  、DELETE语句中的WHERE 、HAVING 子句内,或者其它子查询中。尽管根据可用内存和查询中其它表达式的复杂程度,不同,嵌套限制也有不所不同,但是嵌套到32 层是可能的。个别的查询可能不支持32 层嵌套。任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

有三种基本的子查询:

1、在通过IN引入的列表或者由ANY 或ALL修改的比较运算符的列表上进行操作。

2、通过无修改的比较运算符引入,并且必须返回单个值。

3、通过EXISTS引入的存在测试。

使用IN的子查询

 通过IN(或NOT IN)引入的子查询的结果是一列零值或更多值。子查询返回结果之后,外部查询将利用这些结果。 

 要使用子查询,其子查询语句只能放在“小括里”。且不能包括COMPUTE 或FOR斟字酌BROWSE 子句,如果同时指定TOP子句,则可能只包括 ORDER BY子句。

使用EXISTS的子句查询

   使用EXISTS关键字引入一个子查询时,就相当于进行一次存在测试。外部查询的WHERE子句测试子查询返回的行是否存在。子查询实际上不产生任何数据;它只返回TRUE 或FALSE值。

   注:使用EXISTS引入的子查询在以下几个方面与其子查询略有不同:

   1、EXISTS关键字前面没有列名,常量或其它表达式。

   2、由EXISTS引入的子查询的选择列表通常几乎都是由星(*)组成。由于测试是否存在符合子查询中指定条件的行,所以不必列出列名。

由于通常没有备选的,非子查询的表示法,所以EXISTS关键字很重要。尽管一些使用EXISTS表示的查询不能以任何其它方法表示,但所有使用IN 或由ANY 或ALL修改的比较运算符的查询都可以通过EXISTS表示。

UPDATE 、DELETE 、INSERT语句的子查询

 子查询可以嵌套在update 、delete 、select 、insert语句中使用。

原创粉丝点击