O conceito é bem simples, todos nós
aprendemos na escola a teoria dos conjuntos, logo a extração de informação com
interseção no SQL é simplesmente gerar um subconjunto do conjunto universo.
Digamos que tenhamos duas
tabelas, sendo uma de CLIENTE e outra de PEDIDO, conforme a estrutura abaixo:
CLI_CLIENTE
CLI_N_CODIGO
|
CLI_C_RAZAO
|
CLI_C_PAIS
|
1
|
Acne Ltda
|
Brasil
|
2
|
Limofer Industria
|
China
|
4
|
Kimber Partner S/A
|
EUA
|
PED_PEDIDO
PED_C_CODIGO
|
PED_CLI_N_CODIGO
|
PED_D_DATA
|
PED_N_VALOR
|
100/2019
|
1
|
2019-05-01
|
300,00
|
101/2019
|
1
|
2019-09-12
|
550,00
|
102/2019
|
4
|
2019-09-24
|
1000,00
|
100/2020
|
5
|
2020-01-01
|
600,00
|
INNER JOIN
Forma clássica de retorno do
subconjunto somente com o que é comum na ligação (ON) entre as tabelas.
SELECT CLI_N_CODIGO, CLI_C_RAZAO, PED_C_CODIGO, PED_D_DATA, PED_N_VALOR
FROM CLI_CLIENTE
INNER JOIN
PED_PEDIDO
ON CLI_N_CODIGO = PED_CLI_N_CODIGO
CLI_N_CODIGO
|
CLI_C_RAZAO
|
PED_C_CODIGO
|
PED_D_DATA
|
PED_N_VALOR
|
1
|
Acne Ltda
|
100/2019
|
2019-05-01
|
300,00
|
1
|
Acne Ltda
|
101/2019
|
2019-09-12
|
550,00
|
4
|
Kimber Partner S/A
|
102/2019
|
2019-09-24
|
1000,00
|
LEFT E RIGHT JOIN
Retorna somente a partir da
tabela que e direção que está sendo usado, no caso do LEFT (a primeira tabela)
e RIGHT (a segunda tabela) do JOIN.
SELECT CLI_N_CODIGO, CLI_C_RAZAO, PED_C_CODIGO, PED_D_DATA, PED_N_VALOR
FROM CLI_CLIENTE
LEFT JOIN PED_PEDIDO
ON CLI_N_CODIGO = PED_CLI_N_CODIGO
CLI_N_CODIGO
|
CLI_C_RAZAO
|
PED_C_CODIGO
|
PED_D_DATA
|
PED_N_VALOR
|
1
|
Acne Ltda
|
100/2019
|
2019-05-01
|
300,00
|
1
|
Acne Ltda
|
101/2019
|
2019-09-12
|
550,00
|
2
|
Limofer Industria
|
NULL
|
NULL
|
NULL
|
4
|
Kimber Partner S/A
|
102/2019
|
2019-09-24
|
1000,00
|
SELECT CLI_N_CODIGO, CLI_C_RAZAO, PED_C_CODIGO, PED_D_DATA, PED_N_VALOR
FROM CLI_CLIENTE
RIGHT JOIN PED_PEDIDO
ON CLI_N_CODIGO = PED_CLI_N_CODIGO
CLI_N_CODIGO
|
CLI_C_RAZAO
|
PED_C_CODIGO
|
PED_D_DATA
|
PED_N_VALOR
|
1
|
Acne Ltda
|
100/2019
|
2019-05-01
|
300,00
|
1
|
Acne Ltda
|
101/2019
|
2019-09-12
|
550,00
|
NULL
|
NULL
|
100/2020
|
2020-01-01
|
600,00
|
4
|
Kimber Partner S/A
|
102/2019
|
2019-09-24
|
1000,00
|
FULL OUTER JOIN
Retorna todo o conjunto
relacionando os dados que existem entre
a ligação (ON) e para os casos que não haja ligação carregados os dados nullos.
SELECT CLI_N_CODIGO, CLI_C_RAZAO, PED_C_CODIGO, PED_D_DATA, PED_N_VALOR
FROM CLI_CLIENTE
FULL OUTER
JOIN PED_PEDIDO
ON CLI_N_CODIGO = PED_CLI_N_CODIGO
CLI_N_CODIGO
|
CLI_C_RAZAO
|
PED_C_CODIGO
|
PED_D_DATA
|
PED_N_VALOR
|
1
|
Acne Ltda
|
100/2019
|
2019-05-01
|
300,00
|
1
|
Acne Ltda
|
101/2019
|
2019-09-12
|
550,00
|
2
|
Limofer Industria
|
NULL
|
NULL
|
NULL
|
4
|
Kimber Partner S/A
|
102/2019
|
2019-09-24
|
1000,00
|
NULL
|
NULL
|
100/2020
|
2020-01-01
|
600,00
|
Segue um infográfico que ajuda no entendimento de cada tipo de ligação.
