您当前的位置: 首页 > 数据库教程 > Oracle教程 > Oracle巧取指定记录以及巧用外关联查询

Oracle巧取指定记录以及巧用外关联查询

作者:guanchaofeng 来源:不详 发布时间: 2009-05-09 12:45 点击:
本文中利用例子的形式来解决Oracle巧取指定记录与巧用外关联查询问题。 如何取得表中第6到第10条记录的值 第一种方法,使用minus语句: 假设ddl语句如下: CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT) 那么第一种方法就是取出前5条,再取出前10条

Oracle巧取指定记录以及巧用外关联查询

本文中利用例子的形式来解决Oracle巧取指定记录与巧用外关联查询问题。

如何取得表中第6到第10条记录的值

第一种方法,使用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;

另外一种方法,采用子查询:

子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前10条数据,顺路也取得前10条数据的rownum,然后再一次查询的时候取得刚才查询的rownum大于5的那些数据。SQL语句如下:

SELECT ID, VALUE FROM (SELECT ID, VALUE, ROWNUM R FROM T WHERE R <= 10)WHERER > 5;

通过上面的语句,就得到了6到第10条数据了。

利用外连接替代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的执行效率要高很多很多。

分享到:
本文"Oracle巧取指定记录以及巧用外关联查询"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4