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