sql从两个表中选择。伯爵要高得多?

时间:2015-07-22 18:09:48

标签: mysql sql

有人可以帮我解释一下这里发生了什么。

select COUNT(*) from X; -- returns 764
select COUNT(*) from Y; -- returns 878
select COUNT(*) from X,Y; -- returns 670792

为什么计数要高得多。第三个陈述不会返回X和Y中的所有行吗?我不太明白为什么伯爵要高得多。

也许X,Y给我重复的线条?

任何解释都有帮助。谢谢!

2 个答案:

答案 0 :(得分:4)

如果您未指定join条件,则select查询会返回两个表的caterian产品。 x中的每一行都与y中的所有其他行相连接。

例如:如果你有2个关系a = {1,2,3} b = {4,5,6}那么X b(笛卡儿积)等于{(1,4),(1) ,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)}。 元素数n(a X b)= n(a)* n(b)

答案 1 :(得分:0)

select COUNT() from X; -- returns 764 select COUNT() from Y; -- returns 878 select COUNT(*) from X,Y; -- returns 670792

会考虑为 select COUNT(*) from X cross join Y

总计数为764 * 878 = 670792

如果你想对X和Y进行计数(假设X和Y中的结构相同) select count(*) from (select * from X union select * from Y) a