Bogos

setembro 15, 2008

Joins em SQL

Filed under: SQL — Tags:, , , , , , , , , , , , — Bogos @ 6:04 pm

A maior dificuldade na hora de desenvolver uma query é quando precisamos trabalhar corretamente com várias tabelas.
Na maioria das vezes, basta associar as tabelas com comparações simples na cláusula WHERE, porém, as vezes a query necessita ser mais refinada, e aí é que entram os JOINs (LEFT JOIN, RIGHT JOIN, INNER JOIN e FULL JOIN).

Os JOINs podem ser usados as cláusulas WHERE ou FROM, dependendo da base de dados utilizada, algumas suportam o uso de *= para por exemplo um LEFT JOIN ao invés de usar o modo ASCII.

Vamos aos casos de uso:

LEFT JOIN
Como o próprio nome já diz, usando o LEFT JOIN, você faz a junção de duas tabelas fazendo com que a tabela da esquerda seja a principal, ou seja, você trabalha com todos os registros da tabela da esquerda e com os registros que se interligam através da FK da tabela da direita. Basicamente, se na tabela da direita uma FK fazer referência à uma PK inexistente na tabela da esquerda, esse registro não será selecionado pela SELECT. Um exemplo:

Código:
SELECT * FROM tabela1 LEFT JOIN tabela2 ON tabela1.id = tabela2.id_tabela1

tabela1 é a tabela principal

Outro exemplo sem usar o modo ASCII:

Código:
SELECT * FROM tabela1, tabela2 WHERE tabela1.id *= tabela2.id_tabela1

O operador *= significa um LEFT JOIN.

RIGHT JOIN
Funciona no mesmo esquema do LEFT JOIN, porém nesse caso a tabela da direita será a principal. O operador *= que indica LEFT JOIN também existe para o RIGHT, sendo ele invertido obviamente ficando =*
Um exemplo de RIGHT JOIN:

Código:
SELECT * FROM tabela1 RIGHT JOIN tabela2 ON tabela1.id = tabela2.id_tabela1

tabela2 é a tabela principal

Usando o operador =*

Código:
SELECT * FROM tabela1, tabela2 WHERE tabela1.id =* tabela2.id_tabela1

INNER JOIN
O INNER JOIN é a junção mais usada entre os JOINs. Ela retorna somente os registros que teêm uma ligação válida entre PK e FK entre as duas tabelas, ou seja, evita de selecionar um registro onde a FK faz referência à uma PK inexistente.
Vamos ao exemplo:

Código:
SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.id = tabela2.id_tabela1

Assim como o RIGHT e o LEFT JOIN podemos utilizar um operador, nesse caso o =

Código:
SELECT * FROM tabela1, tabela2 WHERE tabela1.id = tabela2.id_tabela1

A forma mais usada de JOIN ao invés do modo ASCII para evitar digitar INNER JOIN e um ON.

FULL JOIN
Como o próprio nome já diz, retorna FULL, ou seja, todos os registros das duas tabelas, independente de estarem ligadas de forma inválida. Basicamente, diferete da INNER JOIN, trabalha como se as duas tabelas fossem a principal retornando registros que se interligam através de PK e FK e os que a FK fazem referência a uma PK inexistente. Exemplificando:

Código:
SELECT * FROM tabela1 FULL JOIN tabela2 ON tabela1.id = tabela2.id_tabela1

Dessa forma você praticamente executa um SELECT livre praticamente, porém indica a ligação de PK e FK entre as tabelas

Unindo FULL JOIN ao INNER JOIN podemos por exemplo retornar registros inválidos que não teêm referência entre PK e FK para tratar possíveis erros ou até eliminar registros inválidos ocupando espaço no banco á toa ou corrigir determinados erros.

Existem também os OUTER JOINS.
Com o OUTER JOIN o efeito é quase o mesmo, por exemplo o LEFT OUTER JOIN vai manter os registros da tabela da esquerda sem ligação de PK-FK com a tabela da direita juntando com uma linha nula como se fosse da tabela da direita. Com o RIGHT é ao contrário e o INNER obviamente não existe porque senão ele faria o papel de FULL JOIN.

Bom, espero ter consigo passar algo pra quem precisou de alguma informação daqui.
Dúvidas sintam-se livres para faze-las nos comentários.

Abraços!

Anúncios

Deixe um comentário »

Nenhum comentário ainda.

RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Crie um website ou blog gratuito no WordPress.com.

%d blogueiros gostam disto: