博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
racle Study之---Oracle IN和NOT IN的使用
阅读量:7197 次
发布时间:2019-06-29

本文共 3393 字,大约阅读时间需要 11 分钟。

NOT IN 与  IN 的区别:
------------------------------------------------------------------------------------------------------
not In 相当于 <> all,如果 Not In 后面跟的是子查询的话,子查询中只要包含一个 null 的返回值,则会造成

整个 Not in 字句返回空值,结果就是查询不会返回任何结果。

而 in 相当于 =any 的意思,可以有效处理子查询中返回空值的情况,返回正确的结果。
------------------------------------------------------------------------------------------------------
NOT IN示例:

--该例子想要返回没有下属的职员的姓名,如果子查询中有空值返回的话,则整个查询将没有结果返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
11
:
20
:
02 
SYS@ test3 >conn scott/tiger  
Connected.  
11
:
21
:
18 
SCOTT@ test3 >select * 
from 
emp;  
     
EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO  
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------  
      
7369 
SMITH      CLERK           
7902 
1980
-12
-17 
00
:
00
:
00        
800                    
20  
      
7499 
ALLEN      SALESMAN        
7698 
1981
-02
-20 
00
:
00
:
00       
1600        
300         
30  
      
7521 
WARD       SALESMAN        
7698 
1981
-02
-22 
00
:
00
:
00       
1250        
500         
30  
      
7566 
JONES      MANAGER         
7839 
1981
-04
-02 
00
:
00
:
00       
2975                    
20  
      
7654 
MARTIN     SALESMAN        
7698 
1981
-09
-28 
00
:
00
:
00       
1250       
1400         
30  
      
7698 
BLAKE      MANAGER         
7839 
1981
-05
-01 
00
:
00
:
00       
2850                    
30  
      
7782 
CLARK      MANAGER         
7839 
1981
-06
-09 
00
:
00
:
00       
2450                    
10  
      
7788 
SCOTT      ANALYST         
7566 
1987
-04
-19 
00
:
00
:
00       
3000                    
20  
      
7839 
KING       PRESIDENT            
1981
-11
-17 
00
:
00
:
00       
5000                    
10  
      
7844 
TURNER     SALESMAN        
7698 
1981
-09
-08 
00
:
00
:
00       
1500          
0         
30  
      
7876 
ADAMS      CLERK           
7788 
1987
-05
-23 
00
:
00
:
00       
1100                    
20  
      
7900 
JAMES      CLERK           
7698 
1981
-12
-03 
00
:
00
:
00        
950                    
30  
      
7902 
FORD       ANALYST         
7566 
1981
-12
-03 
00
:
00
:
00       
3000                    
20  
      
7934 
MILLER     CLERK           
7782 
1982
-01
-23 
00
:
00
:
00       
1300                    
10  
14 
rows selected.  
11
:
20
:
11 
SCOTT@ test3 >select empno 
from 
emp  
11
:
20
:
21   
2            
where 
empno NOT IN (select mgr 
from 
emp);  
no rows selected

说明:
Null Values in a Subquery
The SQL statement in the slide attempts to display all the employees who do not have any 
subordinates. Logically, this SQL statement should have returned 12 rows. However, the SQL 
statement does not return any rows. One of the values returned by the inner query is a null value and, 
therefore, the entire query returns no rows

The reason is that all conditions that compare a null value result in a null. So whenever null values 
are likely to be part of the resultsset of a subquery, do not use the NOT INoperator. The NOT IN
operator is equivalent to <> ALL.
---------------------------------------------------------------------------------------------------------
IN的示例:

Notice that the null value as part of the results set of a subquery is not a problem if you use the IN
operator. The IN operator is equivalent to =ANY. For example, to display the employees who have 
subordinates(下属), use the following SQL statement:

1
2
3
4
5
6
7
8
9
10
11
12
11
:
20
:
42 
SCOTT@ test3 >select empno from emp  
11
:
21
:
04   
2      
where empno in  (select mgr from emp);  
   
     
EMPNO  
----------  
      
7566  
      
7698  
      
7782  
      
7788  
      
7839  
      
7902  
6 
rows selected.

---------------------------------------------------------------------------------------------------------
Alternatively, a WHERE clause can be included in the subquery to display all employees who do not 
have any subordinates:
--使用 Not In 的话,要注意除掉子查询中将要返回的空值

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    11
    :
    27
    :
    01 
    SCOTT@ test3 >select empno 
    from 
    emp  
    11
    :
    27
    :
    12   
    2  
    where 
    empno NOT IN (select mgr 
    from 
    emp WHERE MGR IS NOT NULL);  
       
         
    EMPNO  
    ----------  
          
    7844  
          
    7521  
          
    7654  
          
    7499  
          
    7934  
          
    7369  
          
    7876  
          
    7900  
    8 
    rows selected.
本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1688399,如需转载请自行联系原作者
你可能感兴趣的文章
在 CSS 中,width 和 height 指的是内容区域的宽度和高度
查看>>
河马SQLServer注入工具v1.1
查看>>
Linux基础知识随笔记
查看>>
Oracle:ORA-01791: 不是 SELECTed 表达式
查看>>
SpringMVC快速入门
查看>>
2019-05-20 Java学习日记之String类型
查看>>
.net core Jenkins持续集成Linux、Docker、K8S
查看>>
python入门
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Cisco ASA5512 双线
查看>>
杨元庆:税收影响联想电脑国内售价
查看>>
Linux虚拟机下lvm扩大根目录磁盘空间
查看>>
tomcat应用实践(虚拟主机以及站点优化)
查看>>
使用VB.NET重构简单知识简述
查看>>
访问网络共享
查看>>
xfreerdp的用法
查看>>
Redis有序集合数据类型操作命令
查看>>
iOS项目分层
查看>>
Apache+PHP+MySQL搭建步骤
查看>>