提莫队长蓄势待发.

select * from Tf_fdctze t1
where EXISTS (select id from Tf_fdctze t2 where t2.id ='33' and t1.id=t2.id)

exists 判断条件 子查询为true时才会执行查询,


但是切记

与 in

没有绝对的快慢 主要还是看你写的子查询里面sql语句的水平 

select * from t  where id in(select id from t2 where id ='22' )

子查询返回的记录同时 外围也是查到,类似于for循环 同步

例: 查到了 第5条。 子查询也是第5条,


all 关键字

查询出工资比部门30全部员工工资都高的人

select * from where sal > all( select sal from emp where detp ='30')



上述效率比较高

all 是所有的都必须符合 每比较一次 all都会全部查询一次 

select * from where sal >all( select sal from emp where detp ='30')

查询出工资比部门30任意一个工资高的人 

select  * from emp where sal > (select  min(sal) from emp where delt ='30')


any 是任意的意思,

select * from emp where sal > any(select sal from emp where delt ='30')


统计每个部门的信息和人数

select d.*(select count(1) from emp s  where s.id = d.id ) from  dept d

统计每个部门工资在 500-100。1000-3000 3000-5000的人数

select d.*,

(select count(*)  from emp e  where e.deptno = d.deptno and sal >500 and sal <= 1000) ' 500-1000',

..

 from dept d



count(*) 与 count(1) 区别  本质上没有区别,* 与 1 * 是查询所有的列 而 1 是查询非空。如果有空是跳过的


内联子查询

rownum 是 oracle 对结果集加的一个伪劣通常用来排序时。使用

select e.*,rownum from emp e

select e.*,rownum from (select * from emp )e

----------------------------------------------------------------------------------------

rownum是针对结果集来的 他在order by执行顺序之前,所以rownum 会乱掉

select e.*,rownum from emp order by sal      -- 此时rownum会乱掉。但是 上面例子外的 rownum却不会乱掉

----------------------------------------------------------------------------------------

(rownum  必须从1 开始。。)

select e.* rownum  from (select  * rownum from emp order by sal ) e where rownum <=5 

查询出在6到10之间的

select  * from (select e.* rownum  rf from (select  * from emp  ) e where e.rownum <=10) e2

where  e2.rf > 5



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值