繁体   English   中英

没有WHERE子句的SQL内部联接

[英]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;

如果您有合并两个表的条​​件,则通常将JOINON子句配合使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM