从两个由逗号分隔的表中选择(SELECT)操作如何工作?(SELECT * FROM T1,T2)

62

给定2个表 T1 和 T2。

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

你发起了一个查询:

SELECT * 
  FROM T1, T2

这个查询语句会获取多少行数据?

(a) 4
(b) 5
(c) 6
(d) 9

答案是: 9

问题:

"为什么答案是9?"


上下文是什么?作业?在线测试?你能提供源链接吗? - Mark Byers
请问Vishwanath,您能否更详细地解释一下您的问题? - alexyorke
3
@Vishwanath 解释得很好... - Alex
我刚在一份考试试卷中发现了这个问题..抱歉没有更多的来源可用..只有问题和选项。3、6或9。 - 2easylogic
1个回答

123

两个表之间的逗号表示CROSS JOIN,它给出了这两个表的笛卡尔积。你的查询等同于:

SELECT *
FROM T1
CROSS JOIN T2

结果是将第一张表中的每一行与第二张表中的每一行进行配对。因此,结果中的行数是原始表格行数的乘积。在这种情况下,答案是3 x 3 = 9。

结果中的行如下:

T1.foo   T2.bar
A        1
A        2
A        3
B        1
B        2
B        3
C        1
C        2
C        3

本来想回答这个问题,但看到你的回复后,实际上并没有必要了。+1 - iblamefish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接