GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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

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.

Share

You may also like...

1 Response

  1. Tito disse:

    Muito bom ! Parabéns !

Deixe um comentário

O seu endereço de e-mail não será publicado.