MySQL MINUS

摘要:在本教程中,您将了解如何使用 SQL MINUS运算符以及如何使用 join 在 MySQL 中模拟MINUS

请注意,MySQL 不支持MINUS运算符。本教程向您展示如何使用连接子句模拟 MySQL 中的MINUS运算符。

SQL MINUS运算符简介

MINUS运算符是 SQL 标准中的三个集合运算符之一,其中包括UNIONINTERSECTMINUS

MINUS比较两个查询的结果,并返回第一个查询的结果集中未出现在第二个查询的结果集中的不同行。

下面说明了MINUS运算符的语法:

SELECT select_list1 
FROM table_name1
MINUS 
SELECT select_list2 
FROM table_name2;
Code language: SQL (Structured Query Language) (sql)

使用MINUS运算符的查询的基本规则如下:

  • select_list1select_list2中的列数和顺序必须相同。
  • 两个查询中相应列的数据类型必须兼容。

假设我们有两个表t1t2 ,其结构和数据如下:

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)
MySQL MINUS Example

下面的维恩图说明了MINUS运算:

MySQL MINUS Operator Illustration

请注意,某些数据库系统(例如 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 运算符。

本教程有帮助吗?