oracle中sql函数exists,sql的exits函数

本文探讨了Oracle数据库中EXISTS子句的使用,特别是在查询优化上的应用。通过一个具体的查询例子,解释了如何利用EXISTS来避免全表连接导致的效率问题。当需要从大表中筛选满足小表条件的记录时,使用EXISTS可以提高查询效率。文章还对比了EXISTS与IN子句的使用场景,强调了在大数据量情况下,正确选择查询方式对于性能的重要性。
摘要由CSDN通过智能技术生成

oracle的exits函数

select t.fene

from fenebiao t

where t.code = '001' and date = to_date('2017-07-17', 'yyyy-mm-dd')

and exists (select 1 from  cszqxx b

where  b.fzqdm = substr(t.fkmbm, 9, 6)

and b.fscdm = '100253')

分析:从fenebiao中可以查到关于001基金的所有债券的fene(份额)信息,现在要查询出‘100253’债券的份额信息;但是fenebiao中没有fscdm字段,该字段存在于cszqxx表中,cszqxx表于fenebiao的对应关系b.fzqdm = substr(t.fkmbm, 9, 6);之前用的是left join,关于'100253' cszqxx表中有两条信息,这样就会查询两个fene。用exits是根据exits函数内的返回值,过滤主表fenebiao的内容。

另外,以下内容来自百度知道:

表A(小表),表B(大表)

select * from B where cc in (select cc from A) 这个语句中是先从A表中把cc找出来,然后根据cc再在B中去找相关的cc 由于A表的cc远小于B表的cc 所以可以节省时间

select * from B exists (select cc from A where cc=B.cc)这句话是先从B表里把cc找出来 然后再在A表里找相关的cc  由于B表的cc远多于A表的cc 所以这样做很浪费时间

总结: 用in 时 大表在前小表在后

用exists时 小表在前大表在后

2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值