SQL MINUS运算符

Man*_*hra 2 sql oracle oracle11g

select deptno  
from emp2  
MINUS  
select deptno 
from dpt  
order by deptno;  
Run Code Online (Sandbox Code Playgroud)

上面的查询返回=没有找到数据

然而,

select deptno,ename   
from emp2  
MINUS  
select deptno,dname 
from dpt   
order by deptno;  
Run Code Online (Sandbox Code Playgroud)

返回所有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
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 6

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

想想这样:

查询1:

select deptno  
from emp2  
MINUS  
select deptno 
from dpt  
order by deptno; 
Run Code Online (Sandbox Code Playgroud)

例:

[1,2,3,4] - [1,2,3,4] = empty
Run Code Online (Sandbox Code Playgroud)

查询2:

select deptno,ename   
from emp2  
MINUS  
select dept no,dname 
from dpt  
order by deptno; 
Run Code Online (Sandbox Code Playgroud)

例:

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

减去

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