Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->数据库应用 ->Oracle ->Oracle巧取指定记录以及巧用外关联查询
  相关分类: 
Access
DB2
Mysql
Oracle
PostgreSQL
SQL Server
Sybase
其他数据库
  站内搜索: 
热门文章排行
热门文章排行 Oracle 10gR2 RAC + RHEL AS4U2 (04-22)
深刻理解Oracle数据库的启动和关闭(04-17)
设计和实施Oracle RAC项目 (04-23)
Oracle XQuery查询、构建和转换XML (04-23)
分享:我的oracle9i学习笔记 (04-23)
精采文章排行
精采文章排行 怎样保持Oracle数据优良性能的若干诀(06-29)
讲解基于Oracle高性能动态SQL程序开(06-29)
如何恢复只有完好数据文件的Oracle数(06-29)
八个学习点帮助你全面认识Oracle数据(06-29)
轻松六步使你的Oracle存储过程迅速加(06-29)
  ·浅析Oracle数据库的最大可用性体系结构 ·在Oracle 9i中Form Builder使用树心得 ·Oracle 9i应用COMPOSE和UNISTR创建沉音 ·Oracle巧取指定记录以及巧用外关联查询 ·快速掌握Oracle数据库游标的使用方法 ·你对Oracle数据库字符集究竟认识多少? ·讲解Oracle数据库之中数据安全完全分析 ·讲解Oracle数据库中LONG类型字段的存取 ·Oracle数据库中创建表时怎样考虑列顺序

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

作者:Webmaster   来源:   点击:   日期:2007-06-29 [收藏] [投稿]

  IE是否经常中毒?推荐您

本文中利用例子的形式来解决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 <= 10
MINUS
SELECT * 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)
WHERE
R > 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数据库游标的使用方法   下一篇:Oracle 9i应用COMPOSE和UNISTR创建沉音
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·迅速安装Linux与Oracle数据库步骤精讲

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。