MariaDB MINUS 运算符使用指南

在 MariaDB 中,MINUS 是一个内置的集合运算符,它返回两个结果集的差。

从 MariaDB 10.6.1 开始支持 MINUS,以便与 Oracle 兼容。

在 MariaDB 10.6.1 及更高版本中, 您可以使用 MINUS 代替 EXCEPT

要使用 MINUS,请先设置为 ORACLE 模式:

SET SESSION sql_mode='ORACLE';

MariaDB MINUS 语法

这里是 MariaDB MINUS 操作符的语法:

rs1 MINUS rs2

参数

rs1
必需的。 一个结果集。
rs2
必需的。 另一个结果集。

两个结果集必须具有相同的列。

返回值

rs1 MINUS rs2 返回两个结果集的差。也就是说 MINUS 返回哪些只存在于第一个结果集中但不存在于第二个结果集中的行。

MariaDB MINUS 示例

首先,让我们创建两个表以演示示例:

DROP TABLE IF EXISTS test_number_1;
CREATE TABLE test_number_1 (
    num INT NOT NULL
);

DROP TABLE IF EXISTS test_number_2;
CREATE TABLE test_number_2 (
    num INT NOT NULL
);

然后,让我们插入几行数据:

INSERT INTO test_number_1
VALUES (0), (1), (1), (2), (3), (4), (4);
INSERT INTO test_number_2
VALUES (3), (4), (4), (5), (6), (7), (8);

然后,让我们看一下 test_number_1 表中的数据:

SELECT * FROM test_number_1;

输出:

+-----+
| num |
+-----+
|   0 |
|   1 |
|   1 |
|   2 |
|   3 |
|   4 |
|   4 |
+-----+

让我们看一下 test_number_2 表中的数据:

SELECT * FROM test_number_2;

输出:

+-----+
| num |
+-----+
|   3 |
|   4 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
+-----+

如果您想要得到只存在于 test_number_1 表中的数字,请使用以下语句:

SELECT * FROM test_number_1
MINUS
SELECT * FROM test_number_2;

输出:

+-----+
| num |
+-----+
|   0 |
|   1 |
|   2 |
+-----+

如果您想要得到只存在于 test_number_2 表中的数字,请使用以下语句:

SELECT * FROM test_number_2
MINUS
SELECT * FROM test_number_1;

输出:

+-----+
| num |
+-----+
|   5 |
|   6 |
|   7 |
|   8 |
+-----+

注意, MINUS 默认返回唯一的行,如果您想获得所有的行,请使用 MINUS ALL

SELECT * FROM test_number_1
MINUS ALL
SELECT * FROM test_number_2;

输出:

+-----+
| num |
+-----+
|   0 |
|   1 |
|   2 |
|   1 |
+-----+

结论

在 MariaDB 中,MINUS 是一个内置的集合运算符,它返回两个结果集的差。