添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在本教程中,将学习如何在条件中使用SQL Server EXISTS 运算符来测试子查询中是否存在行。

SQL Server EXISTS运算符概述

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

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

EXISTS ( subquery)

在此语法中,子查询仅是SELECT语句。子查询返回行后,EXISTS运算符返回TRUE并立即停止处理。

请注意,即使子查询返回NULL值,EXISTS运算符也会计算为TRUE

SQL Server EXISTS运算符示例

让我们举一些例子来了解EXISTS运算符的工作原理。

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

请参阅示例数据库中的customers表。

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

SELECT
    customer_id,
    first_name,
    last_name
    sales.customers
WHERE
    EXISTS (SELECT NULL)
ORDER BY
    first_name,
    last_name;

执行上面查询语句,得到以下结果:

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

1.2. EXISTS带有相关子查询示例

考虑以下customersorders表,它们的结构如下所示:

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

SELECT
    customer_id,
    first_name,
    last_name
    sales.customers c
WHERE
    EXISTS (
        SELECT
            COUNT (*)
            sales.orders o
        WHERE
            customer_id = c.customer_id
        GROUP BY
            customer_id
        HAVING
            COUNT (*) > 2
ORDER BY
    first_name,
    last_name;

执行上面查询语句,得到以下结果:
EXISTS带有相关子查询示例

在这个例子中,我们有一个相关的子查询,它返回下过两个以上订单的客户。

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

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

1.3. EXISTS 与 IN示例

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

SELECT
    sales.orders
WHERE
    customer_id IN (
        SELECT
            customer_id
            sales.customers
        WHERE
            city = 'San Jose'
ORDER BY
    customer_id,
    order_date;

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

SELECT
    sales.orders o
WHERE
    EXISTS (
        SELECT
            customer_id
            sales.customers c
        WHERE
            o.customer_id = c.customer_id
        AND city = 'San Jose'
ORDER BY
    o.customer_id,
    order_date;

执行上面查询语句,得到以下结果:
EXISTS 与 IN示例

1.4. EXISTS与JOIN

JOIN子句从另一个表返回行记录,EXISTS运算符返回TRUEFALSE

可以使用EXISTS运算符来测试子查询是否返回行,并尽快进行短路。 另一方面,使用JOIN将结果集与另一个相关表中的列组合来扩展结果集。

   纠错/补充