Para aqueles que tinham dúvidas quanto ao funcionamento dos JOIN's das tabelas no SQL, desenvolvi um pequeno tutorial de apoio. Aprender SQL é uma missão prazerosa, apesar de ser considerado um universo de possibilidades. Confira abaixo como ficou:


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"

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.

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 |   <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.

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.|<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 daesquerdado JOIN (neste caso é a TABELA_A) ligadas à tabela da direita, como é o caso da linha 8.

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 |   <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(sedinei@teccos.com.br) Desenvolvedor. TECCOS Tecnologia. Duplo Z Informática

Veja Também