Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O que são Oracle Joins (Sql Joins)?


Às vezes, você precisa exibir dados de várias tabelas. Para fazer isso, você precisa vincular uma tabela a outra tabela. Existem várias maneiras pelas quais podemos obter dados de várias tabelas. Aqui eu estaria focando em Oracle Joins com exemplos. Isso é válido para, em geral, qualquer Sql Joins também . Eu estaria explicando junção interna, junção externa, junção cruzada, junção natural, junção cartesiana com exemplos

Uniões do Oracle


A Oracle se junta  é uma consulta que combina linhas de duas ou mais tabelas oracle.

O Oracle executa uma junção sempre que várias tabelas aparecem na cláusula FROM. Para unir duas tabelas, você precisa identificar as colunas comuns que relacionam as duas tabelas. Na cláusula WHERE você define o relacionamento entre as tabelas listadas na cláusula FROM.

Algumas diretrizes para  Oracle Joins (Sql Joins)

1) ao escrever a instrução select que une tabelas, é uma boa prática preceder o nome da coluna com o nome da tabela para fins de clareza.

2) Para unir m tabelas, precisamos de pelo menos m-1 condições

3) Podemos usar o alias da tabela para o nome das tabelas se o nome da tabela for longo. A tabela parece o código mais curto e, portanto, menos memória

4) Se você não estiver usando table_name ou alias de tabelas ao selecionar a coluna e se várias tabelas tiverem o mesmo nome de coluna, devemos especificar o table_name para a coluna que é comum nas tabelas

Junto Interno


O operador mais comum usado para relacionar duas tabelas é o operador de igualdade (=). Isso é chamado de junção de igualdade ou equijoin . Essa junção simples também conhecida como junção interna

Exemplo do Oracle Inner Join

Syntax
Select tab1.col,tab2.col
from tab1 ,tab2
where tab1.col=tab2.col

SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP , DEPT
where EMP. DEPTNO= DEPT. DEPTNO;


Para executar uma junção de três ou mais tabelas, o Oracle une duas tabelas com base na condição de junção e, em seguida, une o resultado a outra tabela, com base nas condições de junção e repete até que todas as tabelas sejam unidas.

Uniões complexas


Ter uma ou mais condições adicionadas na cláusula WHERE. Por exemplo, se você estiver interessado em todos os departamentos e suas localizações fora do Reino Unido, use
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';

Não -equijoin


Um non-equijoin é a condição de junção diferente do operador de igualdade.

É uma instrução de junção interna que usa uma operação desigual (ou seja:<>,>, <, =, BETWEEN etc.) para corresponder linhas de diferentes tabelas
SELECT e.ename, e.sal, s.grade
FROM  emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;

Produtos cartesianos ou junção cartesiana ou junção cruzada


-Uma junção cartesiana (ou produto cartesiano) (ou junção cruzada) ocorre quando os dados são selecionados de duas ou mais tabelas e a condição de junção é definida ou nenhum relacionamento comum é definido na cláusula WHERE

-Se uma junção for executada e nenhuma condição de junção for especificada, o resultado será um produto cartesiano. Um produto cartesiano é um conjunto de resultados que é o produto do total de linhas das duas tabelas. Se a tabela “P” tiver 100 linhas e a tabela “Q” tiver 100 linhas e um produto cartesiano for desenvolvido, o conjunto de resultados resultante terá 10.000 linhas. Se uma consulta unir três ou mais tabelas, o otimizador poderá encontrar uma maneira de escolher uma ordem de junção que exclua um produto cartesiano, mas não conte com isso.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   cross join DEPT ;

Juntas externas


As junções internas que vimos retornam as linhas correspondentes de duas ou mais tabelas de acordo com a condição de junção. O mecanismo Outer Join retorna os dados de uma tabela mesmo se não houver uma linha correspondente na tabela de junção.

Existem três junções externas

a) Junção externa esquerda ou Junção esquerda

b) Junção externa direita ou Junção direita

c) Junção externa completa ou junção completa

União Externa Esquerda


retorna as linhas correspondentes de ambas as tabelas, bem como as linhas não correspondidas da tabela à esquerda da cláusula de junção.

O LEFT OUTER JOIN retornaria todos os registros da tabela da esquerda e apenas os registros da tabela da direita que se cruzam com a tabela da direita

Aqui está o exemplo do Oracle Left outer Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;

sintaxe de junção oracle (+) :No banco de dados Oracle, também podemos usar a sintaxe do sinal de adição para a junção externa esquerda. Nesse caso, a junção mais está no lado direito da equação.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;

 

União Externa Direita


retorna as linhas correspondentes de ambas as tabelas, bem como as linhas não correspondidas da tabela à direita da cláusula de junção.

Aqui está o exemplo para a junção externa do Oracle Right
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;

sintaxe de junção oracle (+) :No banco de dados Oracle, também podemos usar a sintaxe do sinal de mais para RIGHT OUTER JOIN. Nesse caso, a junção à direita é indicada quando o sinal de mais está à esquerda da equação.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;

União Externa Completa


Este tipo de junção retorna todas as linhas da tabela do lado ESQUERDO e da tabela do lado DIREITO com nulos no lugar onde a condição de junção não é atendida

Aqui está o exemplo para Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;

Esta consulta retornará todas as linhas de ambas as tabelas. Usar a sintaxe Oracle usando E.DEPT_ID (+) =D.DEPT_ID (+) é impossível porque o sinal (+) pode referenciar apenas uma tabela. Temos que usar a União para conseguir o mesmo usando o sinal +
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+)
union
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno;

Alguns RDBMS não suportam a cláusula Full outer join, então podemos usar abaixo para cobrir isso
select empno,ename,dept.deptno,dname
from emp
left OUTER JOIN dept
on emp.deptno=dept.deptno
union
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;


UNIÇÃO NATURAL

A junção natural especifica que a junção relaciona todas as colunas com os mesmos nomes nas duas tabelas.

Basicamente, ele compara as colunas comuns de ambas as tabelas umas com as outras. Deve-se verificar se existem colunas comuns em ambas as tabelas antes de fazer uma junção natural.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME  FROM EMP  NATURAL JOIN DEPT;

Aqui dept_id é a mesma coluna entre as tabelas emp e dept

A junção natural pode unir mais de duas tabelas

Espero que você goste desta postagem sobre junções do Oracle com exemplos.

Artigos relacionados
Tutorial de SQL do Oracle

Subconsultas Oracle Sql

Operadores de conjunto Oracle

Visualização Oracle

como escrever consultas sql

Coluna de Incremento Automático - Sequência

Cross Join no Oracle

self join no oracle com exemplos

exemplos de sintaxe de junção oracle

Hash Join no Oracle