Tipos de Joins: Padrões ANSI92 (SQL92) e SQL89
Olá Galera,
Em um Banco de Dados Relacional, instruções SQL do tipo DML (Data Manipulation Language) são muito utilizadas – como o próprio nome já diz – para manipulação de dados. Muitas vezes precisamos exibir os dados de várias tabelas, uma Join é o que precisamos, pois, através desta conseguimos recuperar dados de mais de uma tabela.
Neste artigo vamos demonstrar algumas Joins, nos padrões SQL89 e ANSI92 ou SQL92, são elas: Inner Join, Left Join, Right Join, Full Join e Cross Join, sendo as duas primeiras as mais utilizadas em nosso dia-a-dia.
INNER JOIN
Este tipo de Join deverá ser usado quando o resultado esperado entre duas ou mais tabelas seja por coincidência, ou seja, para cada linha da primeira tabela queremos a(s) linha(s) da segunda tabela correspondente(s). Vejamos o exemplo abaixo entre as tabelas EMPLOYEES e DEPARTMENTS.
Padrão Tradicional (SQL89):
Padrão ANSI92 (SQL92):
LEFT JOIN
Este tipo de Join deverá ser usado quando o resultado esperado NÃO seja por coincidência, sendo assim, irá retornar as linhas da primeira tabela mesmo que não haja correspondência na segunda tabela. Vejamos esta utilização no exemplo abaixo entre as tabelas EMPLOYEES e DEPARTMENTS.
Padrão Tradicional (SQL89):
Padrão ANSI92 (SQL92):
RIGHT JOIN
Este é outro tipo de Join onde o resultado esperado NÃO seja por coincidência, mas, neste caso irá retornar as linhas da segunda tabela mesmo que não haja correspondência na primeira. Vejamos outro exemplo abaixo entre as tabelas EMPLOYEES e DEPARTMENTS.
Padrão Tradicional (SQL89):
Padrão ANSI92 (SQL92):
FULL JOIN
Neste caso juntamos o INNER JOIN com a listagem de todas as outras linhas não associadas, tanto do lado direito RIGHT JOIN quanto do lado esquerdo LEFT JOIN, NÃO sendo possível utilizar filtros nas tabelas (Exemplo 1), mas, caso seja necessário, é preciso executar o select antes na tabela colocando os filtros para depois executar o FULL JOIN (Exemplo 2). Veja o exemplo abaixo:
Padrão Tradicional (SQL89):
|
Padrão ANSI92 (SQL92) – Exemplo 1:
Padrão ANSI92 (SQL92) – Exemplo 2:
CROSS JOIN
Deve ser usado quando for necessário juntar duas ou mais tabelas por cruzamento. Para cada linha da tabela EMPLOYEES queremos todos os DEPARTMENTS ou vice-versa. Ele também é chamado de produto cartesiano entre duas tabelas.
Padrão Tradicional (SQL89):
Padrão ANSI92 (SQL92):
Conclusão
Após vários testes em ambientes corporativos de grande porte, não identifiquei diferença no que se refere a performance entre os padrões, porém, no quesito manutenção e legibilidade do código, o padrão SQL92 é de longe o melhor, pois, em Queries extensas (com várias entidades e condições) as Joins entre as tabelas são visualizadas de forma mais rápida.
Muito bom ! Parabéns !