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_id 和 first_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 命令的工作原理

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

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
);
另请阅读