Teradata - junta-se

Join é usado para combinar registros de mais de uma tabela. As tabelas são unidas com base nas colunas / valores comuns dessas tabelas.

Existem diferentes tipos de Joins disponíveis.

  • Junção interna
  • União Externa Esquerda
  • Junção Externa Direita
  • Full Outer Join
  • Self Join
  • Cross Join
  • Junção de Produção Cartesiana

JUNÇÃO INTERNA

Inner Join combina registros de várias tabelas e retorna os valores que existem em ambas as tabelas.

Sintaxe

A seguir está a sintaxe da instrução INNER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Exemplo

Considere a seguinte tabela de funcionários e tabela de salários.

EmployeeNo Primeiro nome Último nome Data de adesão Departamento Não Data de nascimento
101 Mike James 27/03/2005 1 05/01/1980
102 Robert Williams 25/04/2007 2 05/03/1983
103 Peter Paulo 21/03/2007 2 01/04/1983
104 Alex Stuart 01/02/2008 2 06/11/1984
105 Robert James 04/01/2008 3 01/12/1984
EmployeeNo Bruto Dedução Pagamento líquido
101 40.000 4.000 36.000
102 80.000 6.000 74.000
103 90.000 7.000 83.000
104 75.000 5.000 70.000

A consulta a seguir une as tabelas Employee e Salary na coluna comum EmployeeNo. Cada tabela recebe um alias A e B e as colunas são referenciadas com o alias correto.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
INNER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo);

Quando a consulta acima é executada, ela retorna os seguintes registros. O funcionário 105 não é incluído no resultado porque não possui registros correspondentes na tabela Salários.

*** Query completed. 4 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo   DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1            36000 
    102           2            74000 
    103           2            83000 
    104           2            70000

OUTER JOIN

LEFT OUTER JOIN e RIGHT OUTER JOIN também combinam os resultados de várias tabelas.

  • LEFT OUTER JOIN retorna todos os registros da tabela à esquerda e retorna apenas os registros correspondentes da tabela à direita.

  • RIGHT OUTER JOIN retorna todos os registros da tabela da direita e retorna apenas as linhas correspondentes da tabela da esquerda.

  • FULL OUTER JOINcombina os resultados de LEFT OUTER e RIGHT OUTER JOINS. Ele retorna linhas correspondentes e não correspondentes das tabelas unidas.

Sintaxe

A seguir está a sintaxe da instrução OUTER JOIN. Você precisa usar uma das opções de LEFT OUTER JOIN, RIGHT OUTER JOIN ou FULL OUTER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Exemplo

Considere o seguinte exemplo da consulta LEFT OUTER JOIN. Ele retorna todos os registros da tabela Funcionário e registros correspondentes da tabela Salário.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo;

Quando a consulta acima é executada, ela produz a seguinte saída. Para o funcionário 105, o valor NetPay é NULL, pois não há registros correspondentes na tabela Salários.

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1           36000 
    102           2           74000 
    103           2           83000 
    104           2           70000 
    105           3             ?

CROSS JOIN

Cross Join junta todas as linhas da tabela da esquerda a todas as linhas da tabela da direita.

Sintaxe

A seguir está a sintaxe da instrução CROSS JOIN.

SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay 
FROM  
Employee A 
CROSS JOIN 
Salary B 
WHERE A.EmployeeNo = 101 
ORDER BY B.EmployeeNo;

Quando a consulta acima é executada, ela produz a seguinte saída. EmployeeNo 101 da tabela Employee é juntado a cada registro da Tabela Salário.

*** Query completed. 4 rows found. 4 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo   EmployeeNo    NetPay 
-----------  ------------  -----------  ----------- 
    101           1            101         36000 
    101           1            104         70000 
    101           1            102         74000 
    101           1            103         83000