MySQL MINUS运算符

时间:2019-11-20 08:52:07  来源:igfitidea点击:

简介:在本教程中,您将学习有关SQL MINUS运算符的方法以及如何使用join在MySQL中模拟MINUS。

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

SQL MINUS运算符简介

MINUS运算符是SQL标准中包括UNION,INTERSECT和MINUS的三个集合运算符之一。

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进行仿真。

要模拟两个查询的减号,请使用以下语法:

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运算符。