Para aqueles que tinham dúvidas quanto ao funcionamento dos JOIN's das tabelas no SQL, desenvolvi um pequeno tutorial de apoio, que segue abaixo:
Tabelas e seus registros:
TABELA_A
--------------------
|CODIGO | NOME |
--------------------
| 1 | UM |
| 2 | DOIS |
| 3 | TRES |
| 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.|TRES | 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.|TRES | 7.000|
7.|QUATRO |
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.|TRES | 7.000|
7.|CINCO | 4.000|
8.|
-------------------
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.|TRES | 7.000|
7.|QUATRO |
8.|CINCO | 4.000|
9.|
-------------------
// Deixe seu comentário
Take care
Nenhum comentário:
Postar um comentário