知识大全 Oracle巧取指定记录与巧用外关联查询
Posted 语句
篇首语:千教万教教人求真,千学万学学做真人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle巧取指定记录与巧用外关联查询相关的知识,希望对你有一定的参考价值。
Oracle巧取指定记录与巧用外关联查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
取得表中第 到第 条记录的值
第一种方法 使用minus语句
假设ddl语句如下
CREATE TABLE T(ID VARCHAR ( ) PRIMARY KEY VALUE INT)
那么第一种方法就是取出前 条 再取出前 条 然后采用集合运算的方法把前 条减去前 条就OK了 SQL语句如下
SELECT * FROM T WHERE ROWNUM <= MINUSSELECT * 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 T ID T VALUE FROM T T WHERE T VALUE = T VALUE(+) AND T VALUE IS NOT NULL;
而类似的 替代not in语句的时候的SQL语句则为
SELECT T ID T VALUE FROM T T WHERE T VALUE = T VALUE(+) AND T VALUE IS NULL;
cha138/Article/program/Oracle/201311/17083相关参考
如何返回指定行数之间的查询结果以实现web记录分页在Oracle中有许多的方法这里仅仅列出了种希望能对大家有所帮助大家可以根据不同需要选择下面的script )selectwhererow
Oracle数据查询时经常用到的关联 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关联在Ora
asp教程查询指定id记录进行修改<%DimIdSqlUrlId=Html_Encode(RequestQueryString("id"))Ifid=""Then Response
Oracle数据库索引优化技术关联查询性能调优 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
ORACLE提供了一种树形结构用来实现层次查询 STARTWITH指定查询的根行 CONNECTBY指定父行和子行的关系 PRIOR引用父行 为测试方便使用如下Demo 建立数据库表Tr
Oracle千万条记录插入与查询小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近做了个项
有一个表中的数据需要每月更新数据量近百万考虑由台服务器分摊并分批进行更新 这就需要能够查询一批记录并同时修改这批记录的更新状态以免被正在更新的数据被其他服务器取到 加行级锁查询到记录后再遍历结
知识大全 oracle中如何判断本表有多少张表对其有外键关联
在oracle中如何判断本表有多少张表对其有外键关联?我们主要分为两步 第一步 //查询表的主键约束名 select*fromuser_constraintsewhereetable_nam
(一)子查询select*fromtableA whereidoperator(select*fromtableAawhereaid=) operaor 单条记录子查询(
在Oracle数据库中exp中的query参数可以指定一个where条件来有条件地导出记录对于许多不常使用此选项的朋友来说经常会遇到下面这样的错误LRMmultiplevaluesnotallow