SQL em Oracle > DML > Junção de tabelas > Junção Vertical > Operadores sobre conjuntos
Junção Vertical - Operadores sobre conjuntos tl_logo2.jpg

O SQL disponibiliza três operadores que permitem a partir de dois conjuntos produzir um terceiro. Estes operadores actuam sobre as colunas das tabelas de origem, produzindo uma Junção Vertical:

Estes operadores permitem obter um único conjunto resultado a partir de dois conjuntos iniciais. São úteis na junção de diferentes consultas que se refiram a tabelas diferentes mas que tenham colunas com o mesmo tipo de dados. A sua utilizaçãoo segue as seguintes regras:

  1. As duas instruções SELECT têm que seleccionar o mesmo número de colunas;
  2. As colunas correspondentes têm que ser do mesmo tipo de dados;
  3. As linhas duplicadas são eliminadas pelo operador UNION. Se usarmos UNION ALL os duplicados não são eliminados, o que poupa uma operação de SORT;
  4. Os nomes de coluna da primeira consulta aparecem no resultado;
  5. A cláusula ORDER BY aparece no fim da instrução. Se as colunas correspondentes dos diferentes SELECT's tiverem nomes diferentes, a referêcia à(s) coluna(s) deverá ser feita por número de posição;
  6. As instruções SELECT são executadas de cima para baixo;
  7. Se forem utilizados vários operadores de conjunto é possivel usar parentesis para definir prioridades de execução;

UNIÃO (UNION)

O operador UNION permite obter a reunião de dois conjuntos:

JoinVerticalUnion.png

O comando abaixo apresenta os nomes e salários dos empregados das tabelas EMP e EMPLOYEES. São duas consultas unidas numa única.

select ename, sal
from emp
UNION
select first_name, salary
from employees;

O comando UNION elimina automaticamente as linhas repetidas. Se pretendermos que estas apareçam teremos que utilizar UNION ALL:

select job
from emp
UNION
select job_id
from employees;
JOB        
---------- 
AC_ACCOUNT 
AC_MGR     
AD_ASST    
AD_PRES    
AD_VP      
ANALYST    
CLERK      
FI_ACCOUNT 
FI_MGR     
HR_REP     
IT_PROG    
MANAGER    
MK_MAN     
MK_REP     
PRESIDENT  
PR_REP     
PU_CLERK   
PU_MAN     
SALESMAN   
SA_MAN     
SA_REP     
SH_CLERK   
ST_CLERK   
ST_MAN     

24 rows selected

select job
from emp
UNION ALL
select job_id
from employees;
JOB        
---------- 
CLERK      
SALESMAN   
SALESMAN   
MANAGER    
SALESMAN   
MANAGER    
MANAGER    
ANALYST    
PRESIDENT  
SALESMAN   
CLERK      
CLERK      
ANALYST    
CLERK      
AC_ACCOUNT 
AC_MGR     
AD_ASST    
AD_PRES    
AD_VP      
AD_VP      
FI_ACCOUNT 
FI_ACCOUNT 
FI_ACCOUNT 
FI_ACCOUNT 
FI_ACCOUNT 
FI_MGR     
HR_REP     
IT_PROG    
IT_PROG    
IT_PROG    
IT_PROG    
IT_PROG    
MK_MAN     
MK_REP     
PR_REP     
PU_CLERK   
PU_CLERK   
PU_CLERK   
PU_CLERK   
PU_CLERK   
PU_MAN     
SA_MAN     
SA_MAN     
SA_MAN     
SA_MAN     
SA_MAN     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SA_REP     
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
SH_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_CLERK   
ST_MAN     
ST_MAN     
ST_MAN     
ST_MAN     
ST_MAN     

121 rows selected

note04.gif

bthome.gifTopo


INTERSECÇÃO (INTERSECT)

O operador INTERSECT permite obter a intersecção entre dois conjuntos:

JoinVerticalIntersect.png

O comando abaixo permite listar os salários que existem em EMP e em EMPLOYEES:

select sal
from emp
INTERSECT
select salary
from employees;
SAL                    
---------------------- 
3000                   

1 rows selected

bthome.gifTopo


DIFERENÇA (MINUS)

O operador MINUS permite obter a diferença entre dois conjuntos:

JoinVerticalMinus.png

O comando abaixo permite listar os salários que estão em EMP e não estão em EMPLOYEES:

select sal
from emp
MINUS
select salary
from employees;
SAL                    
---------------------- 
800                    
950                    
1100                   
1250                   
1300                   
1500                   
1600                   
2450                   
2850                   
2975                   
5000                   

11 rows selected

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-02-26