数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

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


发布日期:2023年09月03日
 
Oracle巧取指定记录与巧用外关联查询

取得表中第到第条记录的值

第一种方法使用minus语句

假设ddl语句如下


CREATE TABLE T(ID VARCHAR() PRIMARY KEY VALUE INT)

那么第一种方法就是取出前再取出前然后采用集合运算的方法把前条减去前条就OK了SQL语句如下

SELECT * FROM T WHERE ROWNUM <=

MINUS

SELECT * FROM T WHERE ROWNUM <= ;

另外一种方法采用子查询

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

SELECT ID VALUE FROM

(SELECT ID VALUE ROWNUM R FROM T WHERE R <= )

WHERE

R > ;

通过上面的语句就得到了到第条数据了

利用外连接替代not in语句

in语句还有not in语句的效率是非常的差的因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对如果in或者not in两侧的数据量在上万条的时候进行比对的次数就是上亿次很可能一个简单的sql语句就要执行半个小时以上这种效率客户是肯定不能够接受的那我们可以考虑两种方法进行替代第一种就是采用exist语句和not exist语句这种大家应该比较熟悉了另外一种就是巧用外关联语句这种方法可能大家不是很熟悉我来稍微说一下假设数据表的建表DDL语句为

CREATE TABLE T(ID VARCHAR() PRIMARY KEY VALUE INT)

而in或者not in的表的建表DDL语句为

CREATE TABLE T(VALUE INT)

Oracle中外关联采用的是(+)符号表示外关联也就是说标识了(+)符号的部分在找不到对应的值的时候为NULL下面是替代in语句的时候的SQL语句

SELECT TID TVALUE

FROM T T

WHERE TVALUE = TVALUE(+)

AND TVALUE IS NOT NULL;

而类似的替代not in语句的时候的SQL语句则为

SELECT TID TVALUE

FROM T T

WHERE TVALUE = TVALUE(+)

AND TVALUE IS NULL;

大家可以试验一下在数据量多的时候采用外关联比用in或者not in的执行效率要高很多很多

上一篇:技巧:Oracle数据库Redo故障恢复

下一篇:向基于Linux的OracleRAC10g集群添加新节点