sql中UNION和UNION ALL比较与用法
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 结果 E_Name |
如果能确定没有重复行,建议使用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子句改变排序方式。
补充:数据库,Mssql