(1)子查询
子查询是嵌套在另一个语句,如:select,insert,update、delete中的查询
子查询的例子:
(2)嵌套子查询
子查询可以嵌套在另外一个子查询中,SQL Server最多支持32个嵌套级别
嵌套子查询的例子:
查找价格高于'上海永久'和'凤凰'品牌的所有产品的平均定价的产品。
第一步: 子查询以获取品牌名称为 '上海永久' 和 '凤凰' 的品牌标识号列表:
第二步: 计算属于这些品牌的所有产品的平均价格。
第三步: 查找价格高于 '上海永久' 和 '凤凰' 品牌的所有产品的平均定价的产品
(3)相关子查询
①相关子查询是使用外部查询的值的子查询。即,它取决于外部查询的值
②相关子查询不能作为简单子查询独立执行
③对外部查询评估的每一行重复执行一次相关子查询。相关子查询也称为重复子查询。
相关子查询的例子:查找价格等于其类别的最高价格的产品
(4)Exists运算符
exists 运算符是一个逻辑运算符,用于检查子查询是否返回任何行
如果子查询返回一行或多行,则exists运算符返回true
①带子查询的exists返回null示例
例子:
例子说明:查询返回包含null的结果集,这也导致exists运算符计算为true
②Exists带相关子查询示例
例子:
例子说明:①如果客户下达的订单数小于或等于2,则子查询返回一个空结果集
②该结果集导致exists运算符计算为false
③Exists与in示例
例子:
SQL中exists与in的使用及效率:
a:通常采用exists要比in效率高,因为in不走索引
b:看实际情况:in适合于外表大而内表小的情况;而exists相反
c:当a表数据与b表数据一样大时,in与exists效率差不多,可选其一
④any运算符
any运算符是一个逻辑运算符,它将标量值与子查询返回单列值集进行比较
例子:
注意:some运算符等效于any运算符
⑤all运算符
all运算符是一个逻辑运算符,它将标量值与子查询返回的单列值列表进行比较
例子: