跳到主要内容

SQL中的EXISTS操作符

提示
  1. 存在检测:SQL中的 EXISTS 运算符用于检测子查询是否返回任何结果,若返回则执行外部查询。
  2. 基本语法EXISTS 的基本语法为 WHERE EXISTS(SUBQUERY),其中 SUBQUERY 是内嵌的 SQL 查询。
  3. NOT 运算符结合使用:可以与 NOT 运算符结合使用,即 WHERE NOT EXISTS(SUBQUERY),这样当子查询结果为空时,外部查询将被执行。

SQL 中的 EXISTS 运算符用于测试 子查询 中是否存在任何值,即仅当子查询不是 NULL(空结果集)时才执行外部 SQL 查询。

示例

-- 选择订单金额小于 12000 的客户的客户 ID 和名字
SELECT customer_id, first_name
FROM Customers
WHERE EXISTS (
SELECT order_id
FROM Orders
WHERE Orders.customer_id = Customers.customer_id AND amount < 12000
);

这里,SQL 查询:

  • 检查 Orders 表中 amount 小于 12000 的客户的 order_id
  • 返回 Customers 表中购买金额小于 12000 的客户的 customer_idfirst_name

SQL EXISTS 语法

SQL EXISTS 运算符的语法是:

SELECT column1, column2, ...
FROM table
WHERE EXISTS(SUBQUERY);

这里,

  • column1, column2, ... 是要过滤的列名
  • table 指的是表名
  • EXISTS 测试子查询的结果
  • SUBQUERY 可以是任何 SQL 查询

示例 1:SQL EXISTS

-- 如果客户 ID 存在于 Orders 表中,则从 Customers 表中选择客户 ID 和名字

SELECT customer_id, first_name
FROM Customers
WHERE EXISTS (
SELECT order_id
FROM Orders
WHERE Orders.customer_id = Customers.customer_id
);

这是 SQL 命令的工作原理:

SQL 中 EXISTS 运算符的工作原理

这个过程会对外部查询的每一行重复进行。

如何在 SQL 中使用 EXISTS 运算符

SQL NOT EXISTS

我们还可以使用 NOT 运算符来反转 EXISTS 子句的工作方式。如果 子查询 返回空结果集,SQL 命令将执行。

例如,

-- 如果客户 ID 不存在于 Orders 表中,则从 Customers 表中选择客户 ID 和名字

SELECT customer_id, first_name
FROM Customers
WHERE NOT EXISTS (
SELECT order_id
FROM Orders
WHERE Orders.customer_id = Customers.customer_id
);

这里,如果 Customers 表中的相关行不在 Orders 表中,则 SQL 命令将返回一行。

SQL EXISTS 示例

DROP TABLE - IF EXISTS

我们可以将可选的 IF EXISTS 命令与 DROP TABLE 子句一起使用。例如,

DROP TABLE IF EXISTS my_table;

CREATE A TABLE - IF NOT EXISTS

我们可以将可选的 IF NOT EXISTS 命令与 CREATE TABLE 子句一起使用。例如,

-- 如果表不存在,则创建表
CREATE TABLE IF NOT EXISTS Companies (
id int,
name varchar(50),
address text,
email varchar(50),
phone varchar(10)
);

另一个 SQL EXISTS 示例

下面的 SQL 查询从 Orders 表中选择了年龄超过 23 岁的客户的订单。

SELECT *
FROM Orders
WHERE EXISTS (
SELECT customer_id
FROM Customers
WHERE Orders.customer_id = Customers.customer_id
AND Customers.age > 23
);