SQL UNION 和 UNION ALL

UNION

UNION 命令用于从两个表中选取相关的信息,很类似 JOIN 命令。不过,当使用 UNION 命令时,所有被选取的列的数据类型应该是相同的。

注释:如使用 UNION,那么只有不同的值会被选取。

SQL Statement 1
UNION
SQL Statement 2;

下面的例子中使用的原始表:

Employees_Norway:

E_IDE_Name
01Hansen, Ola
02Svendson, Tove
03Svendson, Stephen
04Pettersen, Kari

Employees_USA:

E_IDE_Name
01Turner, Sally
02Kent, Clark
03Svendson, Stephen
04Scott, Stephen

使用 UNION 命令

实例

列出所有在挪威和美国的不同的雇员名:

SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA;

结果

E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Scott, Stephen

注释:这个命令无法列出在挪威和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

UNION ALL

UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

SQL Statement 1
UNION ALL
SQL Statement 2;

使用 UNION ALL 命令

实例:

列出在挪威和美国的所有的雇员:

SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA;

结果

E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Svendson, Stephen
Scott, Stephen
### SQL UNIONUNION ALL 的区别 #### 1. 定义与功能 SQL 中的 `UNION` `UNION ALL` 都用于合并两个或多个 SELECT 查询的结果集。然而,它们在处理重复行时的行为不同。`UNION` 会自动去除结果集中的重复行[^2],而 `UNION ALL` 则保留所有行,包括重复的行[^4]。 #### 2. 性能差异 由于 `UNION` 需要额外的排序去重操作,其性能通常低于 `UNION ALL`[^1]。如果查询结果中不包含重复行,或者重复行的存在不影响业务逻辑,则应优先使用 `UNION ALL` 以提高查询效率。 #### 3. 语法示例 以下是 `UNION` `UNION ALL` 的语法及示例: ##### UNION 示例 ```sql SELECT column_name(s) FROM table_name1 WHERE column_name = value1 UNION SELECT column_name(s) FROM table_name2 WHERE column_name = value2; ``` ##### UNION ALL 示例 ```sql SELECT column_name(s) FROM table_name1 WHERE column_name = value1 UNION ALL SELECT column_name(s) FROM table_name2 WHERE column_name = value2; ``` 上述代码展示了如何使用 `UNION` `UNION ALL` 合并来自两个表的结果集[^4]。 #### 4. 使用场景 - 当需要确保结果集中没有重复行时,应使用 `UNION`[^2]。 - 当希望保留所有行且无需去重时,应使用 `UNION ALL`[^1]。 #### 5. 示例对比 以下是一个具体的对比示例,展示 `UNION` `UNION ALL` 的行为差异: 假设存在两个临时表 `#T1` `#T2`,分别插入如下数据: ```sql CREATE TABLE #T1 (data VARCHAR(10)); INSERT INTO #T1 SELECT 'abc' UNION ALL SELECT 'bcd' UNION ALL SELECT 'cde' UNION ALL SELECT 'def' UNION ALL SELECT 'efg'; CREATE TABLE #T2 (data VARCHAR(10)); INSERT INTO #T2 SELECT 'abc' UNION ALL SELECT 'cde' UNION ALL SELECT 'efg'; ``` 执行以下查询: ##### 使用 UNION ```sql SELECT data FROM #T1 UNION SELECT data FROM #T2; ``` 结果为: ``` abc bcd cde def efg ``` ##### 使用 UNION ALL ```sql SELECT data FROM #T1 UNION ALL SELECT data FROM #T2; ``` 结果为: ``` abc bcd cde def efg abc cde efg ``` 从结果可以看出,`UNION` 去除了重复的行,而 `UNION ALL` 保留了所有行[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值