51Testing软件测试网n*ue;R,F%SF5j]"f%Q

Oracle巧取指定记录以及巧用外关联查询)L,mOf&ym2g0

9xJ}]-y0作者:010032  51Testing软件测试网)^"FM[M-hcIDD3Uc0X051Testing软件测试网}u!y:UUT0L8FUq

本文中利用例子的形式来解决Oracle巧取指定记录与巧用外关联查询问题。JW)l8vp7fG|051Testing软件测试网]1G-DfC0HmC,A

如何取得表中第6到第10条记录的值X-X!|8Aw;Vhg051Testing软件测试网8W;m`+L!o;b'PV

第一种方法,使用minus语句:)M[e4F`l^8P0

;]:^Op$a*e

p'Z0},o0  假设ddl语句如下:51Testing软件测试网?U&I&aE+Q

;Ge|6L"a-~ l~1B'U0  CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)51Testing软件测试网(LRB$e*G'hY-U7ROt

+Yig4m ~E'p5l4Vq0  那么第一种方法就是取出前5条,再取出前10条,然后采用集合运算的方法把前10条减去前5条就OK了,SQL语句如下:51Testing软件测试网0MR,qXf.Cl51Testing软件测试网7ZR;Tew(J:a J ]&G

SELECT * FROM T WHERE ROWNUM <= 10%A$aA+BoJF-g,f!Kd051Testing软件测试网6W_%MY$[?z9x

MINUSM LoC Zg qcU0

c)eRcV2{:W*B3H@0  SELECT * FROM T WHERE ROWNUM <= 5;6c

N/\FSvpA.v051Testing软件测试网5~f(n8xA

另外一种方法,采用子查询:$ps&So%y$G0

F9iQ~Z$B\y.e"b0  子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前10条数据,顺路也取得前10条数据的rownum,然后再一次查询的时候取得刚才查询的rownum大于5的那些数据。SQL语句如下:51Testing软件测试网1q\+MX\{

~@ K b*Nu&S0  SELECT ID, VALUE FROM51Testing软件测试网`}Dd/jj51Testing软件测试网(k_3W~v#w;ppR

(SELECT ID, VALUE, ROWNUM R FROM T WHERE R <= 10)R+NW#Q$^[C0

h

V.v7yz4I6K0  WHERE51Testing软件测试网8@#p2{e%XiAM51Testing软件测试网F+g_8Mk+j9N;E1_,R

R > 5;/Gw

L$I@R%~"i0

&B*l#E\:hFmAg0  通过上面的语句,就得到了6到第10条数据了。51Testing软件测试网f I(x0b1P.a51Testing软件测试网5o"G#bte1? X

利用外连接替代not in语句,?k+uE\N8Z~/dhg0

$c5RD

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

k,NG"m4Qy\0  CREATE TABLE T1(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)51Testing软件测试网m%V%Oq%ni!s

av

8~@8e.rDm0  而in或者not in的表的建表DDL语句为:GQJ9~{s4i`)m051Testing软件测试网-r(Oh$|sz5l

CREATE TABLE T2(VALUE INT)51Testing软件测试网6r(T(|B}L$\r*g#L51Testing软件测试网uO4^ZMj:~a

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

HOd0

@_-d/[6Yq4Oo0  SELECT T1.ID, T1.VALUE0o@3mLsC M?k051Testing软件测试网LSr

T3vO%F6t

FROM T1, T2"a@9lv?wF

KP051Testing软件测试网3V-j4cV%k

WHERE T1.VALUE = T2.VALUE(+)u|}y#Fl5z M051Testing软件测试网Z&WL;^.MlW4]9e'[+Sj

AND T2.VALUE IS NOT NULL;.L4}^ K

@:s0

Oe`^1EL0  而类似的。替代not in语句的时候的SQL语句则为:rc4|Y!i'S$D)y,Pe051Testing软件测试网@)uc5I-R

SELECT T1.ID, T1.VALUE51Testing软件测试网Q;MS.z'RuBv:A

gNov'JfE)FtD0  FROM T1, T2o*YoGn0

MHw2[.eY

Pt|0  WHERE T1.VALUE = T2.VALUE(+)51Testing软件测试网@N#R M!q*aY

3t*Iig3{Zq0  AND T2.VALUE IS NULL;2a$tZ5ST$_}:m0

_2f,j$d5OT0  大家可以试验一下,在数据量多的时候,采用外关联比用in或者not in的执行效率要高很多很多。51Testing软件测试网'V\z.~P5r9^

oracle 指定关联,Oracle巧取指定记录以及巧用外关联查询相关推荐

  1. 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象

    获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...

  2. java和oracle的关联,Oracle数据关联查询

    今天又有小进步,^_^! 来源:赛迪网    作者:Alizze 关联在Oracle数据查询时会经常用到,灵活的应用关联可以解决很多实际应用的问题.下面给出一些示例: 建表 create table ...

  3. scrapy 爬取指定贴吧

    scrapy 爬取指定贴吧 爬取指定贴吧,只爬取今天与昨天的,并设置定时,定时生成一个文件 spider.py ## -*- coding: utf-8 -*-from BaiduPOA.items ...

  4. oracle工作日记,Oracle学习日记【4】

    1.查询所返回的列数以及列的类型必须匹配,列名可以不同. 2.只有UNION ALL不会去重.其他三个都需要排序后去重,性能比较差. 2.连接查询 2.1.内连接(INNER JOIN):INNER可 ...

  5. oracle 转换为double,Oracle - 将Varchar转换为Float并指定精度

    我需要将varchar转换为float. (该varchar保证是一个数字)Oracle - 将Varchar转换为Float并指定精度 我试图在预建表的顶部创建一个物化视图.因此,所有数据类型必须完 ...

  6. oracle 创建一个用户,只能访问指定的对象

    今天在开发接口时候,需要给接口开发公司提供一个ORACLE 用户,只能访问指定的表或视图,把过程记录到此 1.创建一个ORACLE 的用户 create user username identifie ...

  7. android编程root启动指定app,取之有道——巧用Root权限 启动其他APP中的Activity

    取之有道--巧用Root权限 启动其他APP中的Activity 2019年01月29日 | 萬仟网移动技术 | 我要评论 这次博主来分享一个很巧妙的办法来启动其他APP中Activity的方法. 首 ...

  8. oracle只导入dmp中指定表,oracle 如何导入dmp文件到指定表空间

    oracle 如何导入dmp文件到指定表空间 2010年01月14日星期四 13:27 1. 打开工具Oracle SQL Plus 以dba身份登录sys用户 user: sys password: ...

  9. oracle创建新指定表空间,oracle创建表空间 创建用户指定表空间并授权

    1.创建表空间 例如: (1)表空间名为myplace: (2)数据文件路径为E:\oracle\oracle_home\oradata\myspace (3)文件名为mydbf.dbf,空间大小为3 ...

最新文章

  1. 深度学习经典教程:深度学习+动手学深度学习
  2. 如何确保TCP协议传输稳定可靠?
  3. 和php交互的过程_JavaScript学习笔记(二十三) 服务器PHP
  4. TinkPHP框架学习-01基本知识
  5. 数据库每日一题 2020.05.21
  6. 英语学习笔记2019-11-15
  7. PGA自动管理原理深入分析及性能调整
  8. mysql java 日期_Mysql和JAVA中的几个日期操作
  9. 时空不平坦,能量不守恒。大爆炸时粒子凭空产生的情形
  10. HUSTOJ的安装与配置
  11. 怎么用html制作求职登记表,有步骤的编写个人简历 其效果更好
  12. 数据库无法插入Could not set property ‘id‘ of ‘class com.XXX‘ with value ‘1481832253064073217‘
  13. PDF页面删除怎么操作
  14. 超详细的ArcGIS生成格网知识汇总
  15. “原时法师”的开发流程记录和总结
  16. Termux安装sox但rec录音静音的问题
  17. cocos2d-x游戏开发 跑酷(四) 关联物理世界
  18. 安卓开发学习(只有java基础)
  19. 纯 html 实现一个简单的个人简历
  20. 机器学习笔记之狄利克雷过程(四)从概率图角度认识狄利克雷过程

热门文章

  1. flex builder 3 序列号和Flash Builder 4 序列号
  2. 索尼mcx500切换台说明书_索尼MCX500特技切换台
  3. 《Mysql是怎样运行的》读书笔记之B+树索引的使用
  4. Ubuntu18.04 安装Proverif 和Syther_tool
  5. 在手机端浏览pdf文件,遇到的问题整理
  6. python淘宝爬虫_简单的抓取淘宝图片的Python爬虫
  7. 2012 Esri 中国开发者大会
  8. 【评测】iPS细胞相关实验服务机构-魔法师的仓库
  9. 程序员 520 表白方式
  10. httprunner3.x详细教程五(debugtalk.py介绍)