SQL EXISTS 运算符

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

示例

-- select customer id and first name of customers
-- whose order amount is less than 12000
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

-- select customer id and first name of customers from Customers table
-- if the customer id exists in the Orders table

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

以下是 SQL 命令的工作原理

How EXISTS operator in SQL works
工作原理:SQL 中的 EXISTS

此过程对外部查询的每一行重复执行。

How to use EXISTS operator in SQL
示例:SQL 中的 EXISTS

SQL NOT EXISTS

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

例如,

-- select customer id and first name from Customers table
-- if the customer id doesn't exist in the Orders table

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

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


SQL EXISTS 示例

DROP TABLE - IF EXISTS

我们可以在 DROP TABLE 子句中添加一个可选的 IF EXISTS 命令。例如,

DROP TABLE IF EXISTS my_table;
CREATE A TABLE - IF NOT EXISTS

我们可以在 CREATE TABLE 子句中添加一个可选的 IF NOT EXISTS 命令。例如,

-- create a table if it doesn't exist
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
);

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战