Sei sulla pagina 1di 3

Devmedia - ClubeDelphi - Utilizando Joins em SQL

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=1071

www.devmedia.com.br
Equipe DevMedia
Noticias/Dicas/Artigos pulicados.

Utilizando Joins em SQL


Para aqueles que tinham dvidas 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 relao entre as tabelas temos: 3 registros para a empresa 1 (que 2 registros para a empresa 2 (que 1 registros para a empresa 3 (que 0 registros para a empresa 4 (que 1 registros para a empresa 5 (que 1 registros para a empresa 8 (que empresas);

existe na tabela de empresas); existe na tabela de empresas); existe na tabela de empresas); existe na tabela de empresas); existe na tabela de empresas); NO existe na tabela de

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 ------------------1 de 3 19/04/2010 18:15

Devmedia - ClubeDelphi - Utilizando Joins em SQL |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| -------------------

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=1071

Nas pesquisas com INNER JOIN o resultado trar somente as linhas que sejam comum nas 2 tabelas, ligadas pelos campos das tabelas em questo 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 | <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 no 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.|<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 no 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:

2 de 3

19/04/2010 18:15

Devmedia - ClubeDelphi - Utilizando Joins em SQL

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=1071

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| 7.000| 9.|<NULL> | -------------------

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 poderamos dizer que uma juno entre o LEFT OUTER JOIN e o RIGHT OUTER JOIN. Sedinei K. Oliveira (sedinei@teccos.com.br) Desenvolvedor. TECCOS Tecnologia. Duplo Z Informtica

www.devmedia.com.br/articles /viewcomp.asp?comp=1071

3 de 3

19/04/2010 18:15