文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF(US Ltr) - 40.0Mb
PDF(A4) - 40.1Mb
手册页(TGZ) - 258.2Kb
手册页(Zip) - 365.3Kb
Info(Gzip) - 4.0Mb
Info(Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  EXCEPT 子句

15.2.4 EXCEPT 子句

Press CTRL+C to copy
query_expression_body EXCEPT [ALL | DISTINCT] query_expression_body [EXCEPT [ALL | DISTINCT] query_expression_body] [...] query_expression_body: See Section 15.2.14,Set Operations with UNION, INTERSECT, and EXCEPT

EXCEPT 将第一个查询块的结果限制为在第二个查询块中也未找到的行。与 UNIONINTERSECT 一样,任何一个查询块都可以使用 SELECTTABLEVALUES。以下是使用 第 15.2.8 节,“INTERSECT 子句” 中定义的 abc 表的示例

Press CTRL+C to copy
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)

UNIONINTERSECT 一样,如果未指定 DISTINCTALL,则默认值为 DISTINCT

DISTINCT 会移除在关系两侧找到的重复项,如下所示

Press CTRL+C to copy
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 相同。)

UNIONINTERSECT 不同,EXCEPT 是可交换的,也就是说结果取决于操作数的顺序,如下所示

Press CTRL+C to copy
mysql> TABLE a EXCEPT TABLE c; +------+------+ | m | n | +------+------+ | 1 | 2 | | 2 | 3 | +------+------+ 2 rows in set (0.00 sec) mysql> TABLE c EXCEPT TABLE a; +------+------+ | m | n | +------+------+ | 1 | 3 | +------+------+ 1 row in set (0.00 sec)

UNION 一样,要比较的结果集必须具有相同数量的列。结果集列类型也与 UNION 中的相同。