易截截图软件、单文件、免安装、纯绿色、仅160KB

比较Oracle SQL中的IN & EXISTS

在Oracle SQL中取数据时有时要用到in 和 exists 那么他们有什么区别呢?
1 性能上的比较
比如Select * from T1 where x in ( select y from T2 )
执行的过程相当于:
select *
  from t1, ( select distinct y from t2 ) t2
 where t1.x = t2.y;
相对的
select * from t1 where exists ( select null from t2 where y = x )
执行的过程相当于:
for x in ( select * from t1 )
   loop
      if ( exists ( select null from t2 where y = x.x )
      then
         OUTPUT THE RECORD
      end if
end loop
表 T1 不可避免的要被完全扫描一遍
分别适用在什么情况?
以子查询 ( select y from T2 )为考虑方向
如果子查询的结果集很大需要消耗很多时间,但是T1比较小执行( select null from t2 where y = x.x )非常快,那么exists就比较适合用在这里
相对应得子查询的结果集比较小的时候就应该使用in.
2 含义上的比较
在标准的scott/tiger用户下
   
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
1
7499
ALLEN
SALESMAN
7698
1981/02/20
1600.00
300.00
30
2
7521
WARD
SALESMAN
7698
1981/02/22
1250.00
500.00
30
3
7566
JONES
MANAGER
7839
1981/04/02
2975.00
20
4
7654
MARTIN
SALESMAN
7698
1981/09/28
1250.00
1400.00
30
5
7698
BLAKE
MANAGER
7839
1981/05/01
2850.00
30
6
7782
CLARK
MANAGER
7839
1981/06/09
2450.00
10
7
7788
SCOTT
ANALYST
7566
1987/04/19
3000.00
20
8
7839
KING
PRESIDENT
 
1981/11/17
5000.00
10
9
7844
TURNER
SALESMAN
7698
1981/09/08
1500.00
0.00
30
10
7876
ADAMS
CLERK
7788
1987/05/23
1100.00
20
11
7900
JAMES
CLERK
7698
1981/12/03
950.00
30
12
7902
FORD
ANALYST
7566
1981/12/03
3000.00
20
13
7934
MILLER
CLERK
7782
1982/01/23
1300.00
 
10
执行
SQL> select count(*) from emp where empno not in ( select mgr from emp );
COUNT(


相关文档:

oracle, stored procedure, cursor

CREATE OR REPLACE PROCEDURE kevin_proc(x varchar) IS
a VARCHAR(20);
b VARCHAR(20);
CURSOR mycur(rn NUMBER) IS SELECT * from t_kevin_test WHERE ROWNUM<rn;
BEGIN
OPEN mycur(10);
LOOP FETCH mycur INTO a,b;
EXIT WHEN mycur%NOTFOUND;
Dbms_Output.put_line('a: '||a);
Dbms_Output.put_line('b: '| ......

oracle乱码

大致分为三部份,1.SQL,2.ERP本身,3.本机
1.如果是SQL导出时出现,乱码可以通过修改NLS_LANG,来避免乱码,
繁体修改成:TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5
简体修改成: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
英文就不用说了!!
2.如果是ERP export 时出现乱码,可以通过设置profile来设置FND: NATIVE CLIENT ENC ......

数据库oracle for update of 和for update的区别

select * from TTable1 for update 锁定表的所有行,只能读不能写
 
2  select * from TTable1 where pkid = 1 for update 只锁定pkid=1的行
3  select * from Table1 a join Table2 b on a.pkid=b.pkid for update 锁定两个表的所有记录
 
4 select * from Table1 a join Table2 b on a.pki ......

Oracle 多行记录合并/连接/聚合字符串的几种方法

什么是合并多行字符串(连接字符串)呢,例如:
SQL> desc test;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y
CITY VARCHAR2(20) Y
SQL> select * from test;
COUNTRY CITY
-------------------- --------------------
中国 台北
中国 香 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号