SQL的子查询(下)

本文详细介绍了SQL中的EXISTS、IN、ANY和ALL运算符,包括它们的语法、用法和示例。讨论了这些运算符在不同场景下的效率,并提供了相关子查询的应用,帮助理解如何在查询中有效地使用这些运算符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL的子查询(下):

数据库表:

 er图:

D. SQL Server Exists运算符 :

EXISTS 运算符是一个逻辑运算符,用于检查子查询是否返回任何行。 如果子查询返回一行或多行,则 EXISTS 运算符返回 TRUE 。

以下是SQL Server EXISTS 运算符的语法:

在此语法中,子查询仅是 SELECT 语句。子查询返回行后, EXISTS 运算符返回 TRUE 并立即停止处理。 请注意,即使子查询返回 NULL 值, EXISTS 运算符也会计算为 TRUE

  1. 1. 带子查询的EXISTS返回NULL示例

以下示例返回 customers 表中的所有行: 

在此示例中,子查询返回包含 NULL 的结果集,这也导致 EXISTS 运算符计算为 TRUE 。

  1. 2. EXISTS带有相关子查询示例

以下示例查找已下过两个以上订单的所有客户:

如果客户下达的订单数小于或等于 2 ,则子查询返回一个空结果集,该结果集导致 EXISTS 运算符计算 为 FALSE 。

根据 EXISTS 运算符的结果,客户是否包含在结果集中。

  1. 3.  EXISTS带有相关子查询示例

以下语句使用 IN 运算符查找城市为 San Jose 的客户订单: 

 

以下语句使用返回相同结果的 EXISTS 运算符:

SQLEXISTSIN的使用及效率

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 。

以下示例按品牌查找价格低于平均价格中最低价格的产品:

以上就是我最近新学习到的新的知识内容,现在分享给你们,希望可以帮助到你们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值