我试图了解此结果: 为什么我在情况2中得到100行结果? 如果我仅使用2个第一个查询来运行代码,则结果为18行, 因此,在第2种情况下,我希望收到109行的结果...?
SELECT FirstName,LastName --9 rows
FROM employees
UNION --UNION 1
SELECT FirstName,LastName --9 rows
FROM employees
UNION ALL --UNION 2
SELECT companyName, contactName --91 rows
FROM Customers
-- UNION 1 UNION 2 RESULT (# Rows)
--Situation 1 UNION UNION 100
--Situation 2 UNION ALL UNION 100
--Situation 3 UNION UNION ALL 100
--Situation 4 UNION ALL UNION ALL 109
答案 0 :(得分:3)
我认为这里的大多数答案都没有抓住重点
UNION :合并两个或多个SELECT语句的结果集。
UNION ALL :UNION运算符默认情况下仅选择不同的值。要允许重复值,请使用UNION ALL
在您的情况下,您正在使用UNION和UNION ALL联合几个查询。
当RDBMS引擎遇到这种情况时,它会应用优先级:查询中的最后一个将最后应用。
示例1
select 1
UNION ALL
select 1
UNION
select 1
返回一行:
1
示例2
select 1
UNION
select 1
UNION ALL
select 1
返回2行:
1
1
此优先级规则的例外情况是,如果您嵌入2个带括号的UNION查询,在这种情况下,将首先应用嵌入的include:
让我们修改前面的示例1:
select 1
UNION ALL
( select 1
UNION
select 1
)
返回2行:
1
1
答案 1 :(得分:1)
UNION和UNION ALL之间的基本区别是联合操作从结果集中消除了重复的行,但联合全部在连接后返回了所有行。
答案 2 :(得分:0)
UNION语句有效地对结果集执行SELECT DISTINCT 。
UNION
UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,使用UNION命令时,所有选定的列都必须具有相同的数据类型。使用UNION,只会选择不同的值。
全部联盟
UNION ALL命令与UNION命令相同,只是UNION ALL选择所有值。
Union和Union all之间的区别在于,Union all不会消除重复的行,而只是从所有符合您查询条件的表中提取所有行,并将它们组合成一个表。
UNION示例:
SELECT 'hello' AS world UNION SELECT 'hello' AS world ;
world
-------
hello
(1 row)
UNION ALL示例:
SELECT 'hello' AS world UNION ALL SELECT 'hello' AS world ;
world
-------
hello
hello
(2 rows)
在您的情况下:
--Situation 2 UNION ALL UNION 100
在情况2中,UNION
将删除第一个UNION ALL
中的重复项
这就是为什么您获得100条记录而不是109条记录的原因。
SELECT 'hello' AS world UNION ALL SELECT 'hello' AS world UNION SELECT 'hello' AS world ;
world
-------
hello
(1 row)
如果您仍然需要所有行,这就是这种方式
SELECT 'hello' AS world UNION ALL (SELECT 'hello' AS world UNION SELECT 'hello1' AS world) ;
world
--------
hello
hello
hello1
(3 rows)
答案 3 :(得分:0)
要接收109个结果,则意味着对所有子查询执行UNION ALL 在您的情况下,它的意思是:
SELECT FirstName,LastName --9 rows
FROM employees
UNION **ALL** --UNION 1 *this is the change*
SELECT FirstName,LastName --9 rows
FROM employees
UNION ALL --UNION 2
SELECT companyName, contactName --91 rows
FROM Customers