数据库:子查询讲解!
在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌
套在另一个查询块的WHERE子句或HAVING短语中的查询称为嵌套查询或子查询。
子查询也称为内部查询,而包含子查询的语句也称为外部查询。子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。子查询用圆括号括起来。使用IN或NOT IN的子查询
IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式如下:
表达式 [NOT] IN (子查询)
当表达式与子查询的结果集中的某个值相等时,IN谓词返回TRUE,否则返回FLASE,若使用了NOT,则与之相反。
在子查询中使用 ANY,SOME,ALL
1、查询比某个促销商品的折扣值大的商品名称、折扣
2、查询比所有促销商品的折扣值大的商品名称、折扣
INSERT、DELETE和UPDATE语句中的子查询
1、插入子查询结果
基本格式:INSERT INTO <表名>[(<字段1>[,…])] SELECT 子查询
子查询规则
子查询也受下面的条件限制
(1)通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称。
(2)如果外部查询的WHERE子句包括某个列名,则该子句必须与子查询选择列表中的该列兼容。
(3)子查询的选择列表中不允许出现ntext、text和image数据类型。
(4)无修改的比较运算符引入的子查询不能包括GROUP BY和HAVING子句。
(5)包括GROUP BY的子查询不能使用DISTINCT关键字。
(6)不能指定COMPUTE和INTO子句。
(7)只有同时指定了TOP,才可以指定ORDER BY。
(8)由子查询创建的视图不能更新。
(9)通过EXISTS引入的子查询的选择列表由星号(*)组成,而不使用单个列名。
(10)当=、!=、<、<=、>、或>=用在主查询中,ORDER BY子句和GROUP BY子句不能用在内层查询中,因为内层查询返回的一个以上的值不可被外层查询处理。