【发布时间】:2021-09-20 10:08:36
【问题描述】:
我的问题是。是否存在以下三个查询会产生不同输出的情况?他们是否总是返回相同的数据集,或者他们是否有任何例外。他们在性能上有什么不同吗?
似乎在所有情况下,一张表的行都乘以另一张表的行。
加入(没有“开”子句)
SELECT * FROM
t1 JOIN t2;
交叉连接
SELECT * FROM t1
CROSS JOIN t2;
从两个表中选择
SELECT a.*, b.*
FROM t1 a, t2 b;
示例数据:
CREATE TABLE t1(id integer, t CHAR(2));
INSERT INTO t1(id, t)
VALUES
(1, "t1"),
(2, "t1"),
(3, "t1"),
(NULL, "t1")
;
CREATE TABLE t2(id integer, t CHAR(2));
INSERT INTO t2(id, t)
VALUES
(2, "t2"),
(3, "t2"),
(4, "t2"),
(NULL, "t2")
;
所有查询都会产生相同的输出:
+------+------+------+------+
| id | t | id | t |
+------+------+------+------+
| 1 | t1 | 2 | t2 |
| 2 | t1 | 2 | t2 |
| 3 | t1 | 2 | t2 |
| NULL | t1 | 2 | t2 |
| 1 | t1 | 3 | t2 |
| 2 | t1 | 3 | t2 |
| 3 | t1 | 3 | t2 |
| NULL | t1 | 3 | t2 |
| 1 | t1 | 4 | t2 |
| 2 | t1 | 4 | t2 |
| 3 | t1 | 4 | t2 |
| NULL | t1 | 4 | t2 |
| 1 | t1 | NULL | t2 |
| 2 | t1 | NULL | t2 |
| 3 | t1 | NULL | t2 |
| NULL | t1 | NULL | t2 |
+------+------+------+------+
【问题讨论】:
标签: mysql join select cross-join