UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。
区别: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_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) 的日子。
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" 的话,那我们会得到完全一样的结果。
SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales
结果集:
Date
Jan-05-1999、Jan-07-1999、Jan-08-1999、Jan-08-1999
Jan-07-1999、Jan-10-1999、Jan-11-1999、Jan-12-1999