Pular para o conteúdo

Tipos de Joins: Padrões ANSI92 (SQL92) e SQL89

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):

joins 2 2501123

Padrão ANSI92 (SQL92):

joins 3 2501153

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):

joins 4 2501172

Padrão ANSI92 (SQL92):

joins 5 2501192

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):

joins 6 2501214

Padrão ANSI92 (SQL92):

joins 7 2501231

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 SQL89 não tem suporte ao FULL JOIN

Padrão ANSI92 (SQL92) – Exemplo 1:

joins 8 2501252

Padrão ANSI92 (SQL92) – Exemplo 2:

joins 9 2501269

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):

joins 10 2501271

Padrão ANSI92 (SQL92):

joins 1 2501112

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.

Eduardo Soares Alves

Eduardo Soares Alves

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress