Para aqueles que tinham dúvidas quanto ao funcionamento dos JOIN's das tabelas no SQL, desenvolvi um pequeno tutorial de apoio...
Tabelas e seus registros:
TABELA_A
|
Codigo |
Nome |
|
1 |
um |
|
2 |
dois |
|
3 |
três |
|
4 |
quatro |
|
5 |
cinco |
TABELA B
|
Lanca |
Codigo |
Valor |
|
1 |
1 |
1.000 |
|
2 |
1 |
2.000 |
|
3 |
1 |
5.000 |
|
4 |
2 |
4.000 |
|
5 |
2 |
9.000 |
|
6 |
3 |
7.000 |
|
7 |
5 |
4.000 |
|
8 |
8 |
7.000 |
Para a relação entre as tabelas
temos:
3 registros para a empresa 1 (que existe na tabela de empresas);
2 registros para a empresa 2 (que existe na tabela de empresas);
1 registros para a empresa 3 (que existe na tabela de empresas);
0 registros para a empresa 4 (que existe na tabela de empresas);
1 registros para a empresa 5 (que existe na tabela de empresas);
1 registros para a empresa 8 (que NÃO existe na tabela de empresas);
Agora vamos ver como ficariam as pesquisas* (SELECT's) com os JOIN's ( INNER, [
LEFT | RIGHT | FULL ] OUTER ):
* Para tais pesquisas vamos usar a seguinte linguagem:
SELECT [CAMPOS]
FROM "TABELA_DA_ESQUERDA"
[INNER] JOIN | {LEFT | RIGHT | FULL } [OUTER]} JOIN "TABELA_DA_DIREITA"
1) INNER JOIN:
SELECT A.NOME "A.NOME",
B.VALOR "B.VALOR"
FROM TABELA_A A
INNER JOIN TABELA_B B ON B.CODIGO = A.CODIGO
|
|
A.NOME |
B.VALOR |
|
1 |
UM |
1.000 |
|
2 |
UM |
2.000 |
|
3 |
UM |
5.000 |
|
4 |
DOIS |
4.000 |
|
5 |
DOIS |
9.000 |
|
6 |
TRÊS |
7.000 |
|
7 |
CINCO |
4.000 |
Nas pesquisas com INNER JOIN o resultado trará somente as linhas que sejam comum
nas 2 tabelas, ligadas pelos campos das tabelas em questão na pesquisa.
2) LEFT OUTER JOIN:
SELECT A.NOME "A.NOME",
B.VALOR "B.VALOR"
FROM TABELA_A A
LEFT OUTER JOIN TABELA_B B ON B.CODIGO = A.CODIGO
|
|
A.NOME |
B.VALOR |
|
1 |
UM |
1.000 |
|
2 |
UM |
2.000 |
|
3 |
UM |
5.000 |
|
4 |
DOIS |
4.000 |
|
5 |
DOIS |
9.000 |
|
6 |
TRÊS |
7.000 |
|
7 |
QUATRO |
NULL |
|
8 |
CINCO |
4.000 |
Nas pesquisas com LEFT OUTER JOIN o
resultado trará todas os registros que estejam na tabela da esquerda do JOIN
(neste caso é a TABELA_A) ao menos 1 vez, mesmo que não tenham registros na
tabela da direita do JOIN (neste caso é a TABELA_B) ligadas à tabela da
esquerda, como é o caso da linha 7.
3) RIGHT OUTER JOIN:
SELECT A.NOME "A.NOME",
B.VALOR "B.VALOR"
FROM TABELA_A A
RIGHT OUTER JOIN TABELA_B B ON B.CODIGO = A.CODIGO
|
|
A.NOME |
B.VALOR |
|
1 |
UM |
1.000 |
|
2 |
UM |
2.000 |
|
3 |
UM |
5.000 |
|
4 |
DOIS |
4.000 |
|
5 |
DOIS |
9.000 |
|
6 |
TRÊS |
7.000 |
|
7 |
CINCO |
4.000 |
|
8 |
NULL |
7.000 |
Nas pesquisas com RIGHT OUTER JOIN o
resultado trará todas os registros que estejam na tabela da direita do JOIN
(neste caso é a TABELA_B) ao menos 1 vez, mesmo que não tenham registros na
tabela da esquerda do JOIN (neste caso é a TABELA_A) ligadas à tabela da
direita, como é o caso da linha 8.
4) FULL OUTER JOIN:
SELECT A.NOME "A.NOME",
B.VALOR "B.VALOR"
FROM TABELA_A A
FULL OUTER JOIN TABELA_B B ON B.CODIGO = A.CODIGO
|
|
A.NOME |
B.VALOR |
|
1 |
UM |
1.000 |
|
2 |
UM |
2.000 |
|
3 |
UM |
5.000 |
|
4 |
DOIS |
4.000 |
|
5 |
DOIS |
9.000 |
|
6 |
TRÊS |
7.000 |
|
7 |
QUATRO |
NULL |
|
8 |
CINCO |
4.000 |
|
9 |
NULL |
7.000 |
Nas pesquisas com FULL OUTER JOIN o
resultado trará todas os registros, ao menos 1 vez, que estejam nas 2 tabelas,
tanto a da esquerda do JOIN (neste caso é a TABELA_A) quanto a da direita do
JOIN (neste caso é a TABELA_B), como é o caso das linhas 7 e 9. O FULL
poderíamos dizer que é uma junção entre o LEFT OUTER JOIN e o RIGHT OUTER JOIN.
_____________________________________________________
Sedinei K. Oliveira - Desenvolvedor
sedinei@teccos.com.br
------------------------
TECCOS Tecnologia
Duplo Z Informática
------------------------
Fone:(51)3527-6619
|