SQL MINUS运算符

时间:2015-09-27 11:04:12

标签: sql oracle oracle11g

select deptno  
from emp2  
MINUS  
select deptno 
from dpt  
order by deptno;  

以上查询返回=未找到数据

然而,

select deptno,ename   
from emp2  
MINUS  
select deptno,dname 
from dpt   
order by deptno;  

返回所有deptno和ename字段值。

你能解释为什么我在第二个查询中使用MINUS运算符时得到了deptno字段的所有值吗?

legend: 
emp is employee table and dpt is department table,
ename is employee name -belonging to emp,
dname is department name -belonging to dpt,
deptno is department no. -common to both

1 个答案:

答案 0 :(得分:6)

在第一个查询中,表之间没有不同的deptno,在第二个查询中,您有相同的deptno,但名称不同

这样想:

查询1:

select deptno  
from emp2  
MINUS  
select deptno 
from dpt  
order by deptno; 

示例:

[1,2,3,4] - [1,2,3,4] = empty

查询2:

select deptno,ename   
from emp2  
MINUS  
select dept no,dname 
from dpt  
order by deptno; 

示例:

[(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')] - 
[(1, 'z'),(2, 'x'),(3, 'u'),(4, 'w')] = 
[(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')]

MINUS

  

MINUS 运算符,它只返回第一个返回的唯一行   查询但不是第二次