SQL的子查询(下):
数据库表:
er图:
D. SQL Server Exists运算符 :
EXISTS 运算符是一个逻辑运算符,用于检查子查询是否返回任何行。 如果子查询返回一行或多行,则 EXISTS 运算符返回 TRUE 。
以下是SQL Server EXISTS 运算符的语法:
在此语法中,子查询仅是 SELECT 语句。子查询返回行后, EXISTS 运算符返回 TRUE 并立即停止处理。 请注意,即使子查询返回 NULL 值, EXISTS 运算符也会计算为 TRUE
- 1. 带子查询的EXISTS返回NULL示例
以下示例返回 customers 表中的所有行:
在此示例中,子查询返回包含 NULL 的结果集,这也导致 EXISTS 运算符计算为 TRUE 。
- 2. EXISTS带有相关子查询示例
以下示例查找已下过两个以上订单的所有客户:
如果客户下达的订单数小于或等于 2 ,则子查询返回一个空结果集,该结果集导致 EXISTS 运算符计算 为 FALSE 。
根据 EXISTS 运算符的结果,客户是否包含在结果集中。
- 3. EXISTS带有相关子查询示例
以下语句使用 IN 运算符查找城市为 San Jose 的客户订单:
以下语句使用返回相同结果的 EXISTS 运算符:
SQL中EXISTS与IN的使用及效率 :
EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引。但要看实际情 况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。当A表数据与B表 数据一样大时,in与exists效率差不多,可任选一个使用。
SQL IN 操作符
IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SQL IN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
原始的表 (在实例中使用:)
Persons 表:
IN 操作符实例
现在,我们希望从上表中选取姓氏为 Adams 和 Carter 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
结果集:
E. SQL Server Any运算符 :
ANY 运算符是一个逻辑运算符,它将标量值与子查询返回的单列值集进行比较。 以下是 ANY 运算符的语法:
在上面语法中,
(1)scalar_expression - 是任何有效的表达式。
(2)comparison_operator - 是任何比较运算符,包括等于( = ),不等于( <> ),大于( > ),大于或等于 ( >= ),小于( < ),小于或等于( <= )。
(3)subquery 是一个[SELECT]语句,它返回单个列的结果集,其数据与标量表达式的数据类型相同。 假设子查询返回值列表 v1,v2,...,vn 。 如果 ANY 比较( scalar_expression,vi )返回 TRUE ,则 ANY 运算符返回 TRUE 。 否则它返回 FALSE 。
请注意, SOME 运算符等效于 ANY 运算符。
以下示例查找销售订单中销售数量超过 2 个的产品:
F. SQL Server All运算符 :
SQL Server ALL 运算符是一个逻辑运算符,它将标量值与子查询返回的单列值列表进行比较。
以下是 ALL 运算符语法:
在上面语法中,
(1)scalar_expression 是任何有效的表达式。
(2) comparison_operator 是任何有效的比较运算符,包括等于( = ),不等于( <> ),大于( > ),大于或 等于( >= ),小于( < ),小于或等于( <= )。
(3) 括号内的子查询( subquery )是一个[SELECT]语句,它返回单个列的结果。 此外,返回列的数据类 型必须与标量表达式的数据类型相同。
如果所有比较对 (scalar_expression,v) 的计算结果为 TRUE ,则 ALL 运算符返回 TRUE ; v 是单列结 果中的值。
如果其中一对 (scalar_expression,v) 返回 FALSE ,则 ALL 运算符返回 FALSE 。
1. scalar_expression > ALL ( subquery )
如果 scalar_expression 大于子查询返回的最大值,则表达式返回 TRUE 。 例如,以下查询查找价格大于所有品牌产品的平均价格的产品:
2. scalar_expression < ALL ( subquery )
如果标量表达式( scalar_expression )小于子查询( subquery )返回的最小值,则表达式求值为 TRUE 。
以下示例按品牌查找价格低于平均价格中最低价格的产品:
以上就是我最近新学习到的新的知识内容,现在分享给你们,希望可以帮助到你们。