query_expression_bodyINTERSECT [ALL | DISTINCT]query_expression_body[INTERSECT [ALL | DISTINCT]query_expression_body] [...]query_expression_body: See Section 15.2.14, “Set Operations with UNION, INTERSECT, and EXCEPT”
INTERSECT 限制多个查询块的结果仅限于所有查询块共有的行。示例:INTERSECT limits the result from multiple query
blocks to those rows which are common to all. Example:
mysql>+------+------+ | m | n | +------+------+ | 1 | 2 | | 2 | 3 | | 3 | 4 | +------+------+ 3 rows in set (0.00 sec) mysql>TABLEa;TABLE b;+------+------+ | m | n | +------+------+ | 1 | 2 | | 1 | 3 | | 3 | 4 | +------+------+ 3 rows in set (0.00 sec) mysql>TABLE c;+------+------+ | m | n | +------+------+ | 1 | 3 | | 1 | 3 | | 3 | 4 | +------+------+ 3 rows in set (0.00 sec) mysql>TABLE a INTERSECT TABLE b;+------+------+ | m | n | +------+------+ | 1 | 2 | | 3 | 4 | +------+------+ 2 rows in set (0.00 sec) mysql>TABLE a INTERSECT TABLE c;+------+------+ | m | n | +------+------+ | 3 | 4 | +------+------+ 1 row in set (0.00 sec)
如同 UNION 和 EXCEPT除非,如果既不指定 DISTINCT指定 ALL,默认为 DISTINCT。As with UNION and
EXCEPT, if neither
DISTINCT nor ALL is
specified, the default is DISTINCT.
DISTINCT 可以从交集两侧移除重复,如图所示:DISTINCT can remove duplicates from either side
of the intersection, as shown here:
mysql>TABLE c INTERSECT DISTINCT TABLE c;+------+------+ | m | n | +------+------+ | 1 | 3 | | 3 | 4 | +------+------+ 2 rows in set (0.00 sec) mysql>TABLE c INTERSECT ALL TABLE c;+------+------+ | m | n | +------+------+ | 1 | 3 | | 1 | 3 | | 3 | 4 | +------+------+ 3 rows in set (0.00 sec)
(TABLE c INTERSECT TABLE c 是前述两个语句中的第一个的等价物。)(TABLE c INTERSECT TABLE c is the equivalent of
the first of the two statements just shown.)
与 UNION,操作数的列数必须相同。结果集列类型也如 UNION。As with UNION, the operands must have the same
number of columns. Result set column types are also determined as
for UNION.
INTERSECT 优先级高于,且在 UNION 和 EXCEPT,因此这里显示的两个语句是等价的:INTERSECT has greater precedence than and is
evaluated before UNION and
EXCEPT, so that the two statements shown here
are equivalent:
TABLE r EXCEPT TABLE s INTERSECT TABLE t; TABLE r EXCEPT (TABLE s INTERSECT TABLE t);
对于 INTERSECT ALL,左侧表格中任意唯一行的最大支持重复数为 4294967295。For INTERSECT ALL, the maximum supported number
of duplicates of any unique row in the left hand table is
4294967295.