SQL Server查询输出?

时间:2011-05-10 12:00:53

标签: sql-server

SQL Server中有两个表

table1 (Id INT)

table2 (Id INT)
table1中的

有十条记录,table2包含0记录

当我从两个表中选择时

Select * from table1, table2

在输出窗口中没有结果显示..

但是当我在table2中插入一条新记录并再次执行上面的select语句时,它将显示table1记录和table2记录。

我很困惑为什么第一个选择语句没有显示任何记录?

5 个答案:

答案 0 :(得分:1)

10 * 0 = 0。那个slele。由于表2包含0条记录,因此结果记录集为空= 0行。

答案 1 :(得分:1)

查询产生一些名为笛卡尔积的东西,它基本上是从一个表连接到另一个表的每个记录。因此,返回的记录总数为

(records in Table1) x  (records in Table2)

但由于Table2有0条记录,因此Cross产品有0条记录 - 因为它无法在其他表中找到任何记录来加入第一张表中的每条记录。

答案 2 :(得分:1)

当您从以逗号分隔的多个表中进行选择时,您实际上要求两个表中的“笛卡尔积”(请参阅​​https://secure.wikimedia.org/wikipedia/en/wiki/Cartesian_product)。如果table table1有X条记录而table2有Y条记录,那么结果将包含X * Y条记录。如果其中一个表包含零记录,则为零记录。

答案 3 :(得分:0)

FROM table1, table2

是两个表的笛卡尔乘积,与

相同
FROM table1 CROSS JOIN table2

两者都会显示table1中一行的每个组合和table2中的一行。

所以,10 x 0 = 0组合。

答案 4 :(得分:0)

您正在进行的操作称为笛卡尔连接(multiset multiplication):它将输出表中所有可能的记录组合。

由于第二个表中没有记录,因此无法进行组合。

如果要连接多个集合(进行多集合添加),请改用UNION ALL

SELECT  id
FROM    table1
UNION ALL
SELECT  id
FROM    table2