. 犄角旮旯·只有它" SQL语句中UNION和UNION?ALL的区别 fengxi_011!关注 阅读:1582012-02-13 10:38 标签:sql语句unionall合并结果集it 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。 union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。 UNION:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。 UNION ALL:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序; Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。 可以在最后一个结果集中指定Order by子句改变排序方式。 例如: SELECT employee_id,job_id FROM employees UNION SELECT employee_id,job_id FROM job_history 以上将两个表的结果联合在一起。这两个例子会将两个select语句的结果中的重复值进行压缩,也就是结果的数据并不是两条结果的条数的和。如果希望即使重复的结果显示出来可以使用UNION ALL,例如: 在oracle的scott用户中有表emp SELECT * FROM emp WHERE deptno >= 20 UNION ALL SELECT * FROM emp WHERE deptno <= 30 这里的结果就有很多重复值了。 有关union和union all关键字需要注意的问题是: UNION 和 UNION ALL都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。 注意:使用UNION和UNION ALL必须保证各个select部分集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。例如下面是一个例子: SELECT empno,ename FROM emp UNION SELECT deptno,dname FROM dept 我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条ORDER BY来对整个结果进行排序。例如: SELECT empno,ename FROM emp UNION SELECT deptno,dname FROM dept ORDER BY ename; 本篇文章来源于:开发学院 http://edu. 原文链接:http://edu./2009/0803/12019.php 0 ,)& 登 录登录后才可发表评论? 前一篇:欢迎您在新浪博客安家 推荐博文 日版奶茶妹妹清纯到爆走红网络 EXO,日本公演大盛况【韩国旅游·韩流明星】 盘点2014年十大最美写真女星(组图) 普京一句话引爆惊人消息:中俄有就要大事发生了 日本官员突然密集访华?求见中国高层希望妥协 中国国产发动机传来喜讯——这是了不得的大事! 坐月子要吃红糖吗? 一分钟肠道按摩法 头发是性格特征的泄密者 手机新浪网 导航 搜索 意见反馈 |
|