Neste sexto tópico falarei sobre junções, ou JOINs. JOIN é uma técnica para visualizar dados de multiplas tabelas através de um único SELECT. Existem diversos tipos de JOINs, que podem ser vistos a seguir:
- INNER JOINS
- NATURAL JOIN
- JOIN … USING
- JOIN … ON
- CARTESIAN JOINS (CROSS JOIN)
- OUTER JOINS
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- SELF-JOIN
É importante mencionar que todos os exemplos abaixo foram feitos usando a sintaxe ANSI SQL, que serve para todos os bancos que implementam esse padrão de SQL, ou seja, todos. Esse também é o tipo de sintaxe abordada nas provas 11g do Oracle.
1) INNER JOINS
Também pode ser chamado de EQUI JOIN. Esse tipo de JOIN uma um operador de igualdade para comparar linhas de multiplas tabelas. Caso essas linhas “batam” estas serão retornadas pelo SELECT. Mais adiante é possível ver os tipos de INNER JOIN:
1.1) NATURAL JOIN
O join é baseado em todas as colunas com os mesmos nomes em todas as tabelas.envolvidas no SELECT. Ex:
1.2) JOIN … USING
Especifica através da clausula USING, colunas com nomes comuns nas tabelas a serem usadas nos JOINS. Ex:
1.3) JOIN … ON
Define especificamente as condições e colunas que farão o JOIN. Ex:
1.4) CARTESIAN JOINS (CROSS JOIN)
Ocorrem quando os dados são selecionados de 2 ou mais tabelas, mas nenhuma condição é especificada. Cada linha da 1º tabela é unida com cada linha da 2º tabela. Se a tabela A possui 3 linhas e a tabela B possui 4 linhas, o select resultante retorna 12 (3 x 4) linhas. Ex:
2) OUTER JOINS
Retorna linhas que são encontradas em todas as tabelas, bem como linhas que não foram encontradas em alguma das tabelas envolvidas no SELECT.
2.1) LEFT OUTER JOIN
Citando o documento da própria Oracle para explicar esse conceito:
“A LEFT OUTER JOIN is one of the JOIN operations that allow you to specify a join clause. It preserves the unmatched rows from the first (left) table, joining them with a NULL row in the shape of the second (right) table.”
A dica que eu passo a vocês, para facilitar é: LEFT OUTER JOIN deve ser usado quando eu precisar de TUDO que estiver apenas na tabela a esquerda, não importando se existam registros equivalentes na tabela da direita
OBS1: A cláusula OUTER é opcional
2.2) RIGHT OUTER JOIN
Citando o documento da própria Oracle para explicar esse conceito:
“A RIGHT OUTER JOIN is one of the JOIN operations that allow you to specify a JOIN clause. It preserves the unmatched rows from the second (right) table, joining them with a NULL in the shape of the first (left) table. A LEFT OUTER JOIN B is equivalent to B RIGHT OUTER JOIN A, with the columns in a different order.”
A dica que eu passo a vocês, para facilitar é: RIGHT OUTER JOIN deve ser usado quando eu precisar de TUDO que estiver apenas na tabela a direita, não importando se existam registros equivalentes na tabela da esquerda
OBS1: A cláusula OUTER é opcional
3) SELF-JOIN
Realiza um JOIN entre uma tabela e “ela mesma”. O nome da tabela aparece na clausula FROM, duas vezes, com aliases diferentes. Ex:
É isso ai pessoal. Por hoje já deu. Até a próxima oportunidade. Keep Querying.