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
解决方案 »
- 触发器中可以用游标不?
- 请问个管道化表函数的用法。
- 请问在oracle中有半角与全角字符串转换的内置函数?
- 从MSSQL中导数据到ORACLE中出现错误
- *****************请问高手以下语句是什么意思?*******************
- 第一次运行SQLPLUS时,提示错误监听器错误,请问是怎么回事
- 菜鸟问基本问题
- Windows 应用程序能用 Ole DB Provider 连接 Oracle 吗?
- pl/sql 中怎么用 for 实现多重循环,别以为简单!给个例子!
- 跪求大拿:ps.setString无法将sql语句中的?设置为参数。
- 说下exist 执行的顺序
- 字符串截取
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'是什么意思啊?