Utilizando Joins em SQL

Veja neste artigo, dicas de como utilizar corretamente Joins em instruções SQL.

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:

Agora vamos ver como ficariam as pesquisas* (SELECT's) com os JOIN's ( INNER, [ LEFT | RIGHT | FULL ] OUTER ):

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

Artigos relacionados