ITPub博客

首页 > 数据库 > Oracle > oracle中union和exists

oracle中union和exists

Oracle 作者:rcuucr 时间:2013-12-07 20:53:02 0 删除 编辑

1、Oracle 中union和union all的用法>

UNION 指令的目的是将两个SQL语句的成效开并起往,可以查看你要的查询成效。
属意:union用法中,两个select语句的字段典范榜样匹配,而且字段个数要不同,如上里的例子,在实践的硬件开收过程,会逢到更复杂的状态,详细请看上里的例子 
select  "1" as type,FL_ID,FL_CODE,FL_CNAME,FLDA.FL_PARENTID from FLDA 
WHERE ZT_ID=2006030002 
union  
select  "2" as type,XM_ID,XM_CODE ,XM_CNAME ,FL_ID from XMDA 
where exists (select * from (select  FL_ID from FLDA WHERE ZT_ID=2006030002 ) a where XMDA.fl_id=a.fl_id) 
order by type,FL_PARENTID ,FL_ID
 

    那个句子的意思是将两个sql语句union查询出往,查询的条件就是看XMDA表中的FL_ID是可和主表FLDA里的FL_ID值相匹配,(也就是存在)。
    UNION在进止表链接后会遴选失落落重复的记录,以是在表链接后会对所产死的成效集进止排序运算,删除重复的记录再返回成效。
    在查询中会逢到 UNION ALL,它的用法和union一样,只不过union含有distinct的功用,它会把两张表了重复的记录往失落落,而union all不会,以是从功用上,union all 会高一点,但在实践中用到的并不是良多。

    而UNION ALL只是简单的将两个成效开并后就返回。那样,假设返回的两个成效集开有重复的数据,那么返回的成效集就会包含重复的数据了。 
    从功用上说,UNION ALL 要比UNION快良多,以是,假设可以确认开并的两个成效集开不包含重复的数据的话,那么就应用UNION ALL,如下: 只管应用union all,果为union需供进止排序,往除重复记录,功用低。

二、Oracle 中exists和in的用法>

有两个简单例子,以声名 “exists”和“in”的功用题目

1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a);

   T1数据量小而T2数据量很是大年夜时,T1<

2) select * from T1 where T1.a in (select T2.a from T2);

   T1数据量很是大年夜而T2数据量小时,T1>>T2 时,2)的查询功用高。


<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23846644/viewspace-1115858/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-05-03