a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 78|回复: 0

[综合] Oracle综合辅导巧取指定记录与外关联查询3

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
利用外连接替代not in语句
% N/ ^9 i' A) H! d  X- E; N6 w- O  in语句还有not in语句的效率是非常的差的,因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对,如果in或者not in两侧的数据量在上万条的时候,进行比对的次数就是上亿次,很可能一个简单的sql语句就要执行半个小时以上。这种效率客户是肯定不能够接受的。那我们可以考虑两种方法进行替代,第一种就是采用exist语句和not exist语句,这种大家应该比较熟悉了。另外一种就是巧用外关联语句,这种方法可能大家不是很熟悉,我来稍微说一下。假设数据表的建表DDL语句为* T. J( z) D. ?/ k3 L; X$ _! ^
  CREATE TABLE T1(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)0 |3 T, x) A4 A1 g0 u
  而in或者not in的表的建表DDL语句为* S8 l( H  a! A
  CREATE TABLE T2(VALUE INT)
4 W& N4 h  x! H' C  Oracle中外关联采用的是(+)符号表示外关联,也就是说标识了(+)符号的部分在找不到对应的值的时候为NULL。下面是替代in语句的时候的SQL语句
" z! E! q* Y) a3 \以下是引用片段:
7 E2 Q. g4 c* k- M  SELECT T1.ID, T1.VALUE
0 G3 @) c4 B- n  FROM T1, T2 % a' o, H  x; U- K8 A& ]% I
  WHERE T1.VALUE = T2.VALUE(+)
% C1 V' [7 ~. S( A$ H6 ^5 J  AND T2.VALUE IS NOT NULL; & m; `" X* f2 P; ^: D, c
4 U( k9 L5 S: U' Q% K- P
  而类似的。替代not in语句的时候的SQL语句则为
% f! r6 d* l. M9 T8 Z9 }8 O以下是引用片段:
$ ~- ^/ T& E" J) V* |8 `& Z  SELECT T1.ID, T1.VALUE 1 q  X6 o: n$ I$ T
  FROM T1, T2 ! l& m. t0 l8 N4 A
  WHERE T1.VALUE = T2.VALUE(+)
5 }) I4 }5 f$ q( M  AND T2.VALUE IS NULL;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 11:47 , Processed in 0.152171 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表