SQL内部连接没有WHERE子句

时间:2018-04-03 02:30:29

标签: sql

我想知道,当没有指定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

尝试在网上找到一些例子,但我似乎找不到: - /

谢谢!

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