关于UNION ALL与 UNION 用法和区别

(转自:http://www.cnblogs.com/EricaMIN1987_IT/archive/2011/01/20/1940188.html)

UNION指令的目的是将两个SQL语句的结果合并起来。从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION的一个限制是两个SQL语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。 UNION只是将两个结果联结起来一起显示,并不是联结两个表。 假设我们有以下的两个表格:   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 UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。 UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。 如果上述的例子我们只用UNION ALL的话,则结果会是: 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 UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,sql union all的执行效率要比sql union效率要高很多,这是因为,使用sql union需要进行排重,而sql union All 是不需要排重的,这一点非常重要,因为对于一些单纯地使用分表来提高效率的查询,完全可以使用sql union All。

 

posted on 2015-09-30 02:04  freedom's_blog  阅读(315)  评论(0编辑  收藏  举报

导航