摘要:在本教程中,您将了解如何使用 SQL MINUS
运算符以及如何使用 join 在 MySQL 中模拟MINUS
。
请注意,MySQL 不支持MINUS
运算符。本教程向您展示如何使用连接子句模拟 MySQL 中的MINUS
运算符。
SQL MINUS
运算符简介
MINUS
运算符是 SQL 标准中的三个集合运算符之一,其中包括UNION
、 INTERSECT
和MINUS
。
MINUS
比较两个查询的结果,并返回第一个查询的结果集中未出现在第二个查询的结果集中的不同行。
下面说明了MINUS
运算符的语法:
SELECT select_list1
FROM table_name1
MINUS
SELECT select_list2
FROM table_name2;
Code language: SQL (Structured Query Language) (sql)
使用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);
Code language: SQL (Structured Query Language) (sql)
以下查询返回与t1
表的查询不同的值,但在t2
表的查询结果中找不到该值。
SELECT id FROM t1
MINUS
SELECT id FROM t2;
Code language: SQL (Structured Query Language) (sql)

下面的维恩图说明了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;
Code language: SQL (Structured Query Language) (sql)
例如,以下查询使用LEFT JOIN
子句返回与MINUS
运算符相同的结果:
SELECT
id
FROM
t1
LEFT JOIN
t2 USING (id)
WHERE
t2.id IS NULL;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您了解了 SQL MINUS 运算符以及如何使用LEFT JOIN
子句在 MySQL 中模拟 MINUS 运算符。
本教程有帮助吗?