1>exists 和in 为什么前者的性能高呢?它们之间有什么区别呢?
2>返回4-7行记录
方案一:
select * from (
select id,name,rownum r from table_ora
where rownum <8)
where r>3
方案二:
select * from
(select id,name,rownum r from
(select id,name from table_ora order by id)
where rownum <8)
where r>3
2>返回4-7行记录
方案一:
select * from (
select id,name,rownum r from table_ora
where rownum <8)
where r>3
方案二:
select * from
(select id,name,rownum r from
(select id,name from table_ora order by id)
where rownum <8)
where r>3
2、如果ID是主键的话,两条语句返回的结果是一样,不是的话,结果会不一样
实际上这个结论只在部分情况下成立
对于第二个问题,认为方案一比较合适
比如说要求按ID排序的第四到第八条
则此情况下,如果ID是主键的话,两种写法都正确
如果ID不是主键的话,则只能用第二种方案
如果不是按ID的话,则无法说谁对谁错
in是判断是否被包含,需要把全表都检索一遍,例:select * from a where col in(select col from b where ...)
exists 是判断是否存在,只要找到符合条件的的结果就返回,例:select * from a where exists (select count(1) from b where col=a.col)
我认为应该是先执行子查询再执行父查询要快啊?可以解释下吗?
select * from w_student where sno in(select sno from w_student where sno =101)
能否把这里的in替换成exists ?怎么替换啊?
觉得这样就行
1. 一般情况下exists效率高一点,因为在执行子查询的时候,exists是一碰到满足条件的记录就返回(不需要查找完整个记录集),而in必须查找完整个记录集才进行返回(in类似于执行表的连接查询);但是在两个大表之间的查询in的效率很可能高于exists,具体情况具体分析:)
select * from w_student where sno in(select sno from w_student where sno =101)
select * from w_student a where exists (select 1 from w_student b where b.sno = 101 and b.sno = a.sno)
2. 方案一返回了物理存储顺序上的4-7条
方案二返回了id排序上的4-7条
'1'是什么意思啊?