分享

sql union

 一路狂奔141 2014-04-19
.
犄角旮旯·只有它"
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年十大最美写真女星(组图)
普京一句话引爆惊人消息:中俄有就要大事发生了
日本官员突然密集访华?求见中国高层希望妥协
中国国产发动机传来喜讯——这是了不得的大事!
坐月子要吃红糖吗?
一分钟肠道按摩法
头发是性格特征的泄密者
手机新浪网 导航 搜索 意见反馈

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多