开发者

SQL Server query output?

开发者 https://www.devze.com 2023-03-05 00:57 出处:网络
There are two tables i开发者_运维问答n SQL Server table1 (Id INT) table2 (Id INT) in table1 there are ten records and in table2 contains 0 record

There are two tables i开发者_运维问答n SQL Server

table1 (Id INT)

table2 (Id INT)

in table1 there are ten records and in table2 contains 0 record

when i select from both tables

Select * from table1, table2

in output window there is no result display..

but when i inserted a new record in table2 and execute again same above select statement then it will display table1 record along with table2 records.

I am getting confused why first select statement does not show any record?


10*0=0. That siple. As table 2 contains 0 records the resulting record set is empty = 0 lines.


The query produces something called Cartesian Product, which is basically every record from one table joined to every other from another. Therefore total number of records returned is

(records in Table1) x  (records in Table2)

But since Table2 has 0 records, the Cross product has 0 records - because it could not find any record in other table to join to with each record in first table.


When you select from multiple tables separated with comma then you are actually asking for a "Cartesian product" (see https://secure.wikimedia.org/wikipedia/en/wiki/Cartesian_product) of the two tables. If table table1 has X records and table2 has Y records, then the result will contain X*Y records. That is zero records if one of the tables contains zero records.


FROM table1, table2

is a Cartesian product of the two tables, the same as

FROM table1 CROSS JOIN table2

Both will show every combination of a row from table1 with a row from table2.

So, 10 x 0 = 0 combinations.


The operation you are doing is called a cartesian join (multiset multiplication): it will output all possible combinations of records in the tables.

Since there are no records in the second table, there are no combinations possible.

If you want to concatenate the multisets (do a multiset addition), use UNION ALL instead:

SELECT  id
FROM    table1
UNION ALL
SELECT  id
FROM    table2
0

精彩评论

暂无评论...
验证码 换一张
取 消