用户登陆 用户注册
您的位置:首页> 电脑专栏>内容正文
Oracle巧取指定记录与巧用外关联查询
[正文]:1 取得表中第6到第10条记录的值  1.1 第一种方法,使用minus语句  假设ddl语句如下:create table t(id varchar2(4) primary key, value int)   那么第一种方法就是取出前5条,再取出前10条,然后采用集合运算的方法把前10条减去前5条就ok了,sql语句如下select * from t where rownum <= 10minusselect * from t where rownum <= 5;   1.2 另外一种方法,采用子查询  子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。
这种方法首先在子查询中得到前10条数据,顺路也取得前10条数据的rownum,然后再一次查询的时候取得刚才查询的rownum大于5的那些数据。
sql语句如下select id, value from (select id, value, rownum r from t where r <= 10)wherer > 5;   通过上面的语句,就得到了6到第10条数据了。
  2 利用外连接替代not in语句  in语句还有not in语句的效率是非常的差的,因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对,如果in或者not in两侧的数据量在上万条的时候,进行比对的次数就是上亿次,很可能一个简单的sql语句就要执行半个小时以上。
这种效率客户是肯定不能够接受的。
那我们可以考虑两种方法进行替代,第一种就是采用exist语句和not exist语句,这种大家应该比较熟悉了。
另外一种就是巧用外关联语句,这种方法可能大家不是很熟悉,我来稍微说一下。
假设数据表的建表ddl语句为 create table t1(id varchar2(4) primary key, value int)   而in或者not in的表的建表ddl语句为create table t2(value int)   oracle中外关联采用的是( )符号表示外关联,也就是说标识了( )符号的部分在找不到对应的值的时候为null。
下面是替代in语句的时候的sql语句select t1.id, t1.value from t1, t2 where t1.value = t2.value( ) and t2.value is not null;   而类似的。
替代not in语句的时候的sql语句则为select t1.id, t1.value from t1, t2 where t1.value = t2.value( ) and t2.value is null;   大家可以试验一下,在数据量多的时候,采用外关联比用in或者not in的执行效率要高很多很多。



网站首页 培训课程 维修指南
技术文章 家电专栏 供应信息
求购信息 培训资讯 展会信息
电脑专栏 教程下载 资料下载
常用软件 PLC教程 PLC资料
变频伺服 低压电器 维修资料
人机界面 自控仪表 工控机类
文章标题: 搜文章
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
 京ICP备11002135号
报时(2026-04-06 00:07:52) 流量统计