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

ORACLE 在not in中使用null的问题

以前还专门小总结过一下ORACLE中关于NULL的一些问题,碰巧今天在看书的过程中又看到了另外一个以前没发现的需要注意的地方,那就是在not in中使用null的问题。
SQL> select * from dept;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
SQL> select deptno
  2  from dept
  3  where deptno in (10,50,null);
    DEPTNO
----------
        10
//看到使用in的时候即便有null 也是正常的 下面看一下not in
SQL> select deptno
  2  from dept
  3  where deptno not in (10,50);
    DEPTNO
----------
        20
        30
        40
//这里看起来和我们的预期挺符合的哦
SQL> select deptno
  2  from dept
  3  where deptno not in (10,50,null);
no rows selected
//怎么回事 为什么加了个null 前面的20、30、40三条数据就不显示出来了
IN和NOT IN本质上都是OR运算,因而计算逻辑OR时处理NULL的方式不同,产生的结果也不同。
下面我们分析一下前面的三条语句
SQL> select deptno
  2  from dept
  3  where deptno in (10,50,null);
这里可以等价于where deptno=10 or deptno=50 or deptno=null,由于是or相连接,那么只要有一个条件为TRUE,整个就喂TRUE了。所以deptno为10的记录显示出来了。
SQL> select deptno
  2  from dept
  3  where deptno not in (10,50,null);
这里等价于where not (deptno=10 or deptno=50 or deptno=null),拿deptno=20的记录来举例吧。
not (20=10


相关文档:

Oracle中为什么where rownum > 3 查找不到数据?

查询表emp中所有数据
select emp_id,rownum from emp
第一步,查询结果,rownum待定
emp_id rownum
1         ?   1
2         ?   2
3         ?   3
4&n ......

Oracle内置函数SQLCODE和SQLERRM的使用

      Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。
  
  OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话, ......

解读ORACLE数据库的统一命名与编码规范

1、编写目的
使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。
2、适用范围
本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工作。
3、对象命名规范
3.1 数据库和SID
数据库名定义为系统名+模块名
★ 全局数据库名和例程SID 名要求一致
★ 因SID ......

ORACLE从表中随机返回n条记录

使用ORDER BY子句,ROWNUM内置函数和DBMS_RANDOM包中的内置函数VALUE来实现
SQL> select * from
2 (
3 select ename,job
4 from emp
5 order by dbms_random.value()
6 )
7 where rownum<=5;
ENAME JOB
---------- ---------
TURNER SALESMAN
SMITH CLERK
MARTIN SA ......

ORACLE对字母和数字混合的数据排序

主要是通过replace和translate来实现
SQL> create view v_tt
2 as
3 select ename||' '||deptno as data
4 from emp;
View created.
SQL> select * from v_tt;
DATA
---------------------------------------------------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号