https://yuanjiaoc.com/tutorial/article/10143
在本教程中,您将了解 SQL MINUS
运算符以及如何在 MySQL 中使用 join
模拟 MINUS
。
请注意,MySQL 不支持
MINUS
运算符。本教程向您展示如何使用连接子句在 MySQL 中模拟MINUS
运算符。
SQL MINUS 运算符简介
MINUS
运算符是 SQL 标准中的三个集合运算符之一,包括 UNION
、INTERSECT
和 MINUS
。
下面说明了 MINUS
运算符的语法:
SELECT select_list1
FROM table_name1
MINUS
SELECT select_list2
FROM table_name2;
使用 MINUS
运算符的查询的基本规则如下:
select_list1
和select_list2
中列的数量和顺序必须相同。- 两个查询中对应列的数据类型必须兼容。
假设我们有两个表 t1
和 t2
,其结构和数据如下:
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);
以下查询从 t1
表的查询返回不同的值,这些值在 t2
表的查询结果中未找到。
SELECT id FROM t1
MINUS
SELECT id FROM t2;
下面的维恩图说明了 MINUS
操作:
请注意,某些数据库系统(例如 Microsoft SQL Server 和 PostgreSQL)使用 EXCEPT
而不是 MINUS
。它们具有相同的功能。
MySQL MINUS 运算符模拟
不幸的是,MySQL 不支持 MINUS
运算符。但是,您可以使用 join
来模拟它。
要模拟两个查询的 MINUS
,请使用以下语法:
SELECT
select_list
FROM
table1
LEFT JOIN table2
ON join_predicate
WHERE
table2.column_name IS NULL;
例如,以下查询使用 LEFT JOIN
子句返回与 MINUS
运算符相同的结果:
SELECT
id
FROM
t1
LEFT JOIN
t2 USING (id)
WHERE
t2.id IS NULL;
在本教程中,您了解了 SQL MINUS
运算符以及如何使用 LEFT JOIN
子句在 MySQL 中模拟 MINUS
运算符。