SQL Server中有两个表
table1 (Id INT)
table2 (Id INT)
table1
中的有十条记录,table2
包含0记录
当我从两个表中选择时
Select * from table1, table2
在输出窗口中没有结果显示..
但是当我在table2中插入一条新记录并再次执行上面的select语句时,它将显示table1记录和table2记录。
我很困惑为什么第一个选择语句没有显示任何记录?
答案 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