Union 和 Union All 《转》

来源:互联网 发布:迅龙数据恢复官网 编辑:程序博客网 时间:2024/05/18 02:14

UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNIONJOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。

区别:UNION 限制两个SQL语句所产生的栏位必需是同种资料类型。

而且:其只是将两个结果集联结起来一起显示,并不是联结两个表。。。。

UNION (类似 SELECT DISTINCT)会去除两个结果集中重复的记录并重新计算排序。

UNION ALL 将结果集全部展示。

 

合并重复行
select * from A
union
select * from B


--
不合并重复行
select * from A
union all
select * from B

//sql server
Select * From (
select top 2 id,adddate,title,url from bArticle where ClassId='1' order by adddate desc) A
Union All
Select * From (
select top 2 id,adddate,title,url from bArticle where ClassId='2' order by adddate desc) B
Union All
Select * From (
select top 2 id,adddate,title,url from bArticle where ClassId='3' order by adddate desc) C
Union All
Select * From (
select top 2 id,adddate,title,url from bArticle where ClassId='4' order by adddate desc) D

另一个例子:

Store_Information表格

字段:store_nameSalesDate

|      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) 的日子。

Store_Information
UNION
SELECT Date FROM Internet_Sales

结果集:

Date

Jan-05-1999Jan-07-1999Jan-08-1999Jan-10-1999Jan-11-1999Jan-12-1999

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

SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales

结果集:

Date

Jan-05-1999Jan-07-1999Jan-08-1999Jan-08-1999

Jan-07-1999Jan-10-1999Jan-11-1999Jan-12-1999