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

2016-01-29 14:40 6 1 收藏

Oracle巧取指定记录与巧用外关联查询,Oracle巧取指定记录与巧用外关联查询

【 tulaoshi.com - 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 <= 10
MINUS
SELECT * FROM T WHERE ROWNUM <= 5;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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

  子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前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条数据了。

  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语句则为

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

<

来源:http://www.tulaoshi.com/n/20160129/1493898.html

延伸阅读
正在看的ORACLE教程是:oracle快速删除重复的记录。做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。 对此,总结了一下删除重复记录的方法,以及每种方法的优...
微信支付记录怎么查询   微信支付记录查询的方法 在微信上,已经可以进行支付的操作,买汽车票、火车票都不是难题。一段时间过后,不少朋友会习惯查看自己微信支付的记录,那么该怎么查询支付记录? 1、打开微信,点击底部的。 2、选择。 3、点击右上角的标志。 4、选择。 5、即可查询到...
在Oracle中,有一个很有趣的东西,那就是rownum。当你从某个表中查询数据的时候,返回的结果集中都会带有rownum这个字段,而且有时候也可以使用rownum进行一些条件查询。 在查询中,我们可以注意到,类似于“select xx from table where rownum n”(n1)这样的查询是有正确含义的,而“select xx from table where rownum = n”这样...
在构建自定义搜索引擎时,开发人员常遇到的一个问题是实现某种类型的分页功能;也就是说,允许用户提交一个返回很多行数据的查询,但是只显示前20条。在用户点击一个链接时,下20条或者前20条数据会从数据库应用程序中取出。 数据库访问存在的一个问题是来自 Web 站点的请求是无状态的。在等待用户请求下一组数据时,让数据库维护一个...
微信支付如何查询交易记录?   1)打开微信软件,进入微信后点击我,我然后点击我的银行卡,再点吉右上角的。   2)再点击交易记录,那么微信支付的交易记录都出现了。  

经验教程

38

收藏

40
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部