sql中UNION和UNION ALL比较与用法

作者:袖梨 2022-06-29

union只是将两个结果联结起来一起显示,并不是联结两个表………… UNION 的语法如下: [SQL 语句 1]
UNION
[SQL 语句 2] 假设我们有以下的两个表格,   Store_Information 表格   store_name Sales Date

 代码如下 复制代码
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
 
Internet Sales 表格   Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750

 
而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM

 代码如下 复制代码
Store_Information
UNION
SELECT Date FROM Internet_Sales 结果:   Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 "SELECT DISTINCT Date" 的话,那我们会得到完全一样的结果。


SQL UNION ALL 语法

 代码如下 复制代码
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。


UNION ALL

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

SQL Statement 1
UNION ALL
SQL Statement 2

使用 UNION ALL 命令
实例:

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

 代码如下 复制代码

SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA

结果

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill


如果能确定没有重复行,建议使用UNION ALL,不用排序。

1.order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All、Intersect、Minus都有效。
2.Union可以对字段名不同但数据类型相同的结果集进行合并;
3.如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。
4.Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
5.Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
6.Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
7.Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
8.可以在最后一个结果集中指定Order by子句改变排序方式。

相关文章

精彩推荐