SELECT ...
EXCEPT [ALL | DISTINCT] SELECT ...
[EXCEPT [ALL | DISTINCT] SELECT ...]
EXCEPT
将第一个语句的结果限制为在第二个SELECT
语句中(也)没有找到的那些行。此处显示了使用表a
,b
和
第 13.2.10.4 节“INTERSECT 子句”c
中定义的示例:
mysql> TABLE a EXCEPT TABLE b;
+------+------+
| m | n |
+------+------+
| 2 | 3 |
+------+------+
1 row in set (0.00 sec)
mysql> TABLE a EXCEPT TABLE c;
+------+------+
| m | n |
+------+------+
| 1 | 2 |
| 2 | 3 |
+------+------+
2 rows in set (0.00 sec)
mysql> TABLE b EXCEPT TABLE c;
+------+------+
| m | n |
+------+------+
| 1 | 2 |
+------+------+
1 row in set (0.00 sec)
与UNION
and
一样INTERSECT
,如果
未指定DISTINCT
nor ALL
,则默认为DISTINCT
.
DISTINCT
删除关系两侧的重复项,如下所示:
mysql> TABLE c EXCEPT DISTINCT TABLE a;
+------+------+
| m | n |
+------+------+
| 1 | 3 |
+------+------+
1 row in set (0.00 sec)
mysql> TABLE c EXCEPT ALL TABLE a;
+------+------+
| m | n |
+------+------+
| 1 | 3 |
| 1 | 3 |
+------+------+
2 rows in set (0.00 sec)
(第一个语句与 具有相同的效果TABLE c
EXCEPT TABLE a
。)
与UNION
一样,要比较的结果集必须具有相同的列数。结果集列类型也被确定为 for UNION
。
EXCEPT
在 MySQL 8.0.31 中添加。