为什么从这个查询中获取9行?

时间:2011-01-14 11:43:03

标签: sql mysql sql-server

Given 2 tables T1 and T2.
T1  T2 
A   1 
B   2
C   3
You make a query SELECT * FROM T1, T2.
What is the no: of rows that are fetched from this query? 
  

答案是9

4 个答案:

答案 0 :(得分:10)

此查询会生成cartesian product,因为未提供其他条件。第一个表中的每一行都与第二个表中的每一行匹配。

结果是

A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3

答案 1 :(得分:3)

因为第一个表中的每个记录都与第二个表的每个记录一起返回,结果不会被过滤。

确切的输出将是:

T1  T2 
A   1 
A   2
A   3 
B   1
B   2
B   3
C   1
C   2
C   3

(订单可能有所不同)

答案 2 :(得分:2)

这是一个笛卡尔积:选择一个表(3)中的所有行和另一个表(3)中的所有行并组合它们,因此3 * 3 = 9。

答案 3 :(得分:0)

这就是你要求它做的。您获得了T1中的所有行以及来自T2的所有行。它们不仅仅是加在一起 ​​- 如果列不同,这将不起作用,例如,虽然您可以使用UNION执行此操作 - 它们将被合并到所谓的“笛卡尔积”中。您基本上可以从两个表中获取所有行的组合。并3*3 = 9