SQL Select语句面试查询

时间:2012-11-28 20:15:05

标签: sql

我在接受采访时遇到了以下问题:

  

给定两个SQL语句将返回多少行   表A和B,其中A和B各有10行?:   Select * from A, B;

我的回答是显而易见的:20。然而,我的采访者告诉我,据说这是100,尽管他说他自己并没有买。任何人都可以对此有所了解吗?

5 个答案:

答案 0 :(得分:3)

该查询返回表AB的笛卡尔积。表A中的每一行都将与表B中的每一行匹配.10行* 10行= 100行。

您可能将其解释为UNION,其中表B中的所有行都附加到表A中行的底部。该查询将如下所示:< / p>

SELECT * FROM A
UNION
SELECT * FROM B

请注意,这仅适用于AB的结构相同的情况。

答案 1 :(得分:2)

那是笛卡尔的JOIN。 A中的所有行都将连接到B中的每一行,从而在输出中生成100行:

A1, B1
A1, B2
A1, B3
. . .
A2, B1
A2, B2
A2, B3,
. . .
A10, B8
A10, B9
A10, B10

答案 2 :(得分:0)

如果您在不应用任何连接的情况下选择两个表,则数据库会自动将笛卡尔积作为默认连接。因此,您将有100行作为结果集。

答案 3 :(得分:0)

这相当于在T-SQL中使用CROSS JOIN,因此您将获得笛卡尔积,因为您没有ON子句来关联表,并且您没有WHERE子句来过滤结果。请参阅http://msdn.microsoft.com/en-us/library/ms190690(v=sql.105).aspx

答案 4 :(得分:0)

当您不使用任何连接条件时,SQL会执行笛卡尔积,并且第一个表的每一行都映射到第二个表的每一行。

您将获得以下记录:

  table1row1   table2row1 
  table1row1   table2row2 
  table1row1   table2row3 
  ........
  ........
  table1row2   table2row1
  .....
  and so on 
  .....

table1row10 table2row10

因此,您将获得100条记录。