我想知道,当没有指定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
尝试在网上找到一些例子,但我似乎找不到: - /
谢谢!
答案 0 :(得分:2)
您正在使用的当前隐式连接语法:
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
子句,那么我们马上就会知道它正在进行交叉连接,大部分时间通常不是您想要做的事情。
答案 1 :(得分:1)
您可以使用交叉连接
select * from table1 cross join table2
这是一个链接,可以更多地了解交叉连接的使用。 https://www.w3resource.com/sql/joins/cross-join.php
答案 2 :(得分:1)
逗号运算符生成笛卡尔积 - 第一个表中的每一行与第二个表中的每一行相结合。
使用显式cross join
:
SELECT table1.letter, table2.letter, table1.number, table2.number
FROM tbl table1 CROSS JOIN
tbl table2;
如果你有条件来组合这两个表,那么你通常会使用带有JOIN
子句的ON
。