select count from two tables=sql中的乘法?

jslywgbw  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(399)

我随机尝试运行如下查询:

select count(*) from table1, table2

结果实际上是两个表的实际行数的乘积,即结果是645792行 table1 有868排 table2 有744排。
如果这是一种预期的行为,我查看了文档,但无法更好地了解这种行为。

8xiog9wr

8xiog9wr1#

这是你的 from 条款:

from table1, table2

这相当于:

from table1 cross join table2

这是两个表的笛卡尔积,它生成一个包含868*744行的结果集。那么 count(*) 只需计算结果行的数量,即得到的结果。
如果要对每个表中的行数求和,则需要计算两个单独的计数:

select
     (select count(*) from table1) 
     + (select count(*) from table2) total_no_rows
avwztpqn

avwztpqn2#

您当前的查询:

select count(*) from table1, table2

正在使用老式的隐式连接语法。因为没有连接条件出现在 WHERE 条款(没有 WHERE 子句),联接默认为交叉联接。这只是两个表中记录之间的交叉积,这就是您当前看到的结果。编写查询的更好方法是:

SELECT COUNT(*)
FROM table1
CROSS JOIN table2;
azpvetkf

azpvetkf3#

'在没有连接条件的情况下,内部连接和(逗号)在语义上是等价的:两者都产生笛卡尔积'https://dev.mysql.com/doc/refman/8.0/en/join.html

相关问题