[英]SQL Inner Join with no WHERE clause
我想知道,当未指定WHERE子句时,内部联接如何工作? 例如,
SELECT table1.letter, table2.letter, table1.number, table2.number
FROM tbl AS table1, tbl AS table2;
tbl:
text, integer
a , 1
b , 2
c , 3
试图在网上找到一些例子,但我似乎找不到任何:-/
谢谢!
您正在使用的当前隐式连接语法:
FROM tbl AS table1, tbl AS table2;
如果WHERE
子句中没有限制,将导致交叉连接。 但是实际上,编写查询时应该使用现代的ANSI-92语法,例如
SELECT
table1.letter,
table2.letter,
table1.number,
table2.number
FROM tbl AS table1
INNER JOIN tbl AS table2
-- ON <some conditions>
使用此语法的一个明显原因是它使查看查询的逻辑更加容易。 在这种情况下,如果更新后的查询缺少ON
子句,那么我们将立即知道它正在执行交叉联接,通常大多数情况下这不是您想要执行的操作。
您可以使用交叉联接
select * from table1 cross join table2
这是一个链接,以了解有关交叉连接的更多信息。 https://www.w3resource.com/sql/joins/cross-join.php
逗号运算符生成笛卡尔乘积-第一个表中的每一行与第二个表中的每一行组合。
使用显式cross join
可以更正确地编写:
SELECT table1.letter, table2.letter, table1.number, table2.number
FROM tbl table1 CROSS JOIN
tbl table2;
如果您有合并两个表的条件,则通常将JOIN
与ON
子句配合使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.