Database
 sql >> Base de Dados >  >> RDS >> Database

Tipos de SQL JOIN


O SQL JOIN combina uma ou mais tabelas com base em seu relacionamento. O SQL JOIN envolve uma tabela pai e um relacionamento de tabela filho.

Existem diferentes tipos de SQL JOINS:
  1. Junta interna
  2. União externa esquerda
  3. Junta externa direita
  4. União externa completa
  5. Cross Join.

Vamos entender cada tipo de junção SQL com a ajuda de exemplos.

Junto Interno

Inner Join no SQL é uma junção amplamente usada. Ele buscou todos os registros de ambas as tabelas até e a menos que a condição correspondesse. Isso significa que essa junção retornará apenas as linhas comuns em ambas as tabelas.

Sintaxe de SQL Inner Join:
SELECT  Table_Name1.Colum_Name1,     Table_Name1.Column_Name2, Table_Name1.Column_Name3,Table_Name2.Column_Name1,Table_Name2.Column_Name2, Table_Name2.Column_Name3, FROM Table_Name1 INNER JOIN Table_Name2 ON table_Name1.Column_Name =Table_Name2.Column_Name;

Considere as tabelas já existentes, que possuem os dados determinados:

Tabela 1:Funcionários
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA C# 5
1003 NIQUIL VANI 50500 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI C# 5
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60.000 DÉLHI ORACLE 1
5001 ARQUIVO SHARMA 55500 DÉLHI TESTE 4

Tabela 2:Gerente
Managerid manager_name manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTE
5 Akash Kadam C#

Tabela 3:Laptop:
LAPTOPID NOME EMPREGADO
L101 DELL NULO
L102 HP 1002
L103 LENOVO NULO
L104 HP 3003
L105 DELL 4002
L106 LENOVO 4003
L107 DELL 5001
L108 HP NULO
L109 DELL NULO
L110 HP NULO

Exemplos de SQL Inner Join

Exemplo 1: Execute uma consulta para unir a Tabela de funcionários e a Tabela de gerentes e exiba os detalhes dos funcionários, como ID do funcionário, nome do funcionário, salário da tabela do funcionário e ID do gerente e nome do gerente da tabela do gerente.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID;

Na consulta acima, buscamos id do funcionário, nome, sobrenome, salário da tabela do funcionário e id do gerente, nome do gerente da tabela do gerente, onde a coluna id do gerente da tabela dos funcionários é igual à coluna id do gerente da tabela do gerente. A consulta retornará todos os registros de correspondência de ambas as tabelas. O ID do gerente é uma coluna comum entre as duas tabelas. E é um nome alternativo para a tabela do funcionário, enquanto M é para a tabela do gerente. O campo de ID do gerente é colocado como uma chave estrangeira na tabela de funcionários. O ID do gerenciador funciona como a chave primária na tabela do gerenciador, que cria um relacionamento pai-filho entre as duas tabelas.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO GERENTE MANAGER_NAME
1001 VAIBHAVI MISHRA 65500 1 Sneedeep Kaur
2001 PRAQUI SHARMA 55500 1 Sneedeep Kaur
4003 RUCHIKA AGARWAL 60.000 1 Sneedeep Kaur
1003 NIQUIL VANI 50500 2 Kirti kirtano
2002 BHAVESH JAIN 65500 2 Kirti kirtano
3002 ANUJA QUERER 50500 2 Kirti kirtano
3001 PRANOTI SHENDE 55500 3 Abhishek Manish
3003 DEEPAM JAUHARI 58500 3 Abhishek Manish
4002 ASHWINI BOLSA 54500 3 Abhishek Manish
4001 RAJESH GOUD 60500 4 Anupam Mishra
5001 ARQUIVO SHARMA 55500 4 Anupam Mishra
1002 VAIBHAV SHARMA 60.000 5 Akash Kadam
2003 RUCHIKA JAIN 50.000 4 Akash Kadam

Os registros são exibidos em ordem crescente por ID do gerente.

Exemplo 2: Execute uma consulta para unir a tabela de funcionários e a tabela de gerentes e exiba os detalhes do funcionário, como id do funcionário, nome do funcionário, salário da tabela do funcionário e id do gerente e departamento do gerente da tabela do gerente, onde o salário do funcionário é maior que 58.000.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, M.MANAGERID, M.MANAGER_DEPARTMENT FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE SALARY> 58000;

Na consulta acima, buscamos o ID do funcionário, nome, sobrenome, salário da tabela do funcionário, ID do gerente e departamento do gerente da tabela do gerente, onde o ID do gerente da tabela dos funcionários é igual ao ID do gerente do gerente tabela apenas os registros de funcionários cujo salário é superior a 58.000.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO GERENTE MANAGER_DEPARTMENT
1001 VAIBHAVI MISHRA 65500 1 ORACLE
4003 RUCHIKA AGARWAL 60.000 1 ORACLE
2002 BHAVESH JAIN 65500 2 FMW
3003 DEEPAM JAUHARI 58500 3 JAVA
4001 RAJESH GOUD 60500 4 TESTE
1002 VAIBHAV SHARMA 60.000 5 C#

Apenas seis registros são exibidos onde o salário de um funcionário excede 58.000.

Exemplo 3: Execute uma consulta para unir a tabela de funcionários e a tabela de laptop, exiba detalhes do funcionário como ID do funcionário, nome do funcionário e salário, a cidade da tabela do funcionário, ID do laptop e nome do laptop da tabela do laptop
SELECT EMP.EMPLOYEEID, EMP.FIRST_NAME, EMP.SALÁRIO, EMP.CITY, LAP.LAPTOPID, LAP. NOME DE EMPLOYEES EMP INNER JOIN LAPTOP LAP ON EMP.EMPLOYEEID =LAP.EMPLOYEEID;

Na consulta acima, buscamos o ID do funcionário, o primeiro nome, o salário, a cidade da tabela dos funcionários, o ID do laptop e o nome da tabela do laptop, onde o ID do funcionário da tabela do funcionário é igual ao ID do funcionário da tabela do laptop. O ID do funcionário é uma chave estrangeira na tabela Laptop, que cria um relacionamento pai-filho entre a tabela Employee e a tabela Laptop.

Saída:
EMPLOYEEID FIRST_NAME SALÁRIO CIDADE LAPTOPID NOME
1002 VAIBHAV 60.000 NOIDA L102 HP
3003 DEEPAM 58500 MUMBAI L104 HP
4002 ASHWINI 54500 NOIDA L105 DELL
4003 RUCHIKA 60.000 DÉLHI L106 LENOVO
5001 ARQUIVO 55500 DÉLHI L107 DELL

Apenas cinco registros de funcionários são exibidos.

Exemplo 4: Escreva uma consulta para exibir o ID do funcionário, o primeiro nome, o salário e o departamento da tabela de funcionários ID do gerente e o nome do gerente da tabela do gerente usando a junção interna em que salário> 55000 e departamento é Oracle.
SELECT EMPLOYEEID, FIRST_NAME, SALARY, DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE SALARY> 55000 AND DEPARTMENT ='ORACLE';

No exemplo de consulta de junção acima, exibimos os detalhes do funcionário, como id, nome, salário e departamento da tabela do funcionário, id do gerente e nome do gerente da tabela do gerente, onde o id do gerente da tabela dos funcionários é igual ao id do gerente de o gerente apenas os funcionários cujo salário é superior a 55.000 e departamento é Oracle.

Saída:
EMPLOYEEID FIRST_NAME SALÁRIO DEPARTAMENTO GERENTE MANAGER_NAME
1001 VAIBHAVI 65500 ORACLE 1 Snehdeep Kaur
2001 PRAQUI 55500 ORACLE 1 Snehdeep Kaur
4003 RUCHIKA 60.000 ORACLE 1 Snehdeep Kaur

Apenas três funcionários cujo salário é superior a 55.000 e o departamento é Oracle.

Exemplo 5: Execute uma consulta de junção na tabela Funcionários, Gerente e Laptop e exiba os detalhes dos funcionários, ID do gerente e ID do laptop.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, M.MANAGERID, L.LAPTOPID FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID INNER JOIN LAPTOP L ON E.EMPLOYEEID =L.EMPLOYEEID; 

A consulta acima exibe o ID do funcionário, o nome, o sobrenome, o ID do gerente e o ID do laptop das tabelas de funcionários, gerente e laptop. Juntamos três mesas. O ID do funcionário é uma coluna comum entre os funcionários e a tabela do laptop e cria um relacionamento pai-filho entre essas três tabelas. Entre funcionários e gerentes, o ID do gerente da tabela é a coluna comum.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME GERENTE LAPTOPID
4003 RUCHIKA AGARWAL 1 L106
3003 DEEPAM JAUHARI 3 L104
4002 ASHWINI BOLSA 3 L105
5001 ARQUIVO SHARMA 4 L107
1002 VAIBHAV SHARMA 5 L102

União Externa Esquerda

A junção externa esquerda retornará todos os registros da tabela no lado esquerdo da junção e os registros correspondentes para a tabela no lado direito da junção. O conjunto de resultados contém null para os registros que não são comuns no lado direito.

Sintaxe da junção externa esquerda:
SELECT        Table_Name1.Colum_Name1,     Table_Name1.Column_Name2, Table_Name1.Column_Name3,Table_Name2.Column_Name1,Table_Name2.Column_Name2, Table_Name2.Column_Name3, FROM Table_Name1 LEFT OUTER JOIN Table_Name2 ON Table_Name1.Column_Name =Table_Name2.Column_Name;

Considere as tabelas existentes, que possuem os seguintes registros:

Tabela 1:Funcionários
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA C# 5
1003 NIQUIL VANI 50500 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI C# 5
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60.000 DÉLHI ORACLE 1
5001 ARQUIVO SHARMA 55500 DÉLHI TESTE 4

Tabela 2:Gerente
Managerid manager_name manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTE
5 Akash Kadam C#

Tabela 3:Laptop
LAPTOPID NOME EMPREGADO
L101 DELL NULO
L102 HP 1002
L103 LENOVO NULO
L104 HP 3003
L105 DELL 4002
L106 LENOVO 4003
L107 DELL 5001
L108 HP NULO
L109 DELL NULO
L110 HP NULO

Exemplos de SQL Left Outer Join

Exemplo 1: Execute uma consulta de junção externa esquerda na tabela Employees e na tabela Laptop, onde exibe a ID do funcionário, o nome do funcionário e a ID do laptop.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, L.LAPTOPID, L.NAME FROM EMPLOYEES E LEFT OUTER JOIN LAPTOP L ON E.EMPLOYEEID =L.EMPLOYEEID; 

Na consulta acima, exibimos o ID do funcionário, o primeiro nome, o sobrenome da tabela do ID do laptop do funcionário e o nome da tabela do laptop e realizamos uma consulta de junção externa esquerda nessas duas tabelas. A consulta retornará valores nulos no lado direito da tabela se as linhas não forem semelhantes entre as tabelas.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME LAPTOPID NOME
1001 VAIBHAVI MISHRA NULO NULO
1002 VAIBHAV SHARMA L102 HP
1003 NIQUIL VANI NULO NULO
2001 PRAQUI SHARMA NULO NULO
2002 BHAVESH JAIN NULO NULO
2003 RUCHIKA JAIN NULO NULO
3001 PRANOTI SHENDE NULO NULO
3002 ANUJA QUERER NULO NULO
3003 DEEPAM JAUHARI L104 HP
4001 RAJESH GOUD NULO NULO
4002 ASHWINI BOLSA L105 DELL
4003 RUCHIKA AGARWAL L106 LENOVO
5001 ARQUIVO SHARMA L107 DELL

Exemplo 2: Escreva uma consulta para buscar o ID do funcionário, nome, sobrenome, salário da tabela do funcionário à esquerda da junção externa na tabela do laptop onde salário> 55.000.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, L.LAPTOPID, L.NAME FROM EMPLOYEES E LEFT OUTER JOIN LAPTOP L ON E.EMPLOYEEID =L.EMPLOYEEID WHERE SALARY> 55000; 
Na consulta acima, buscamos os detalhes do funcionário da tabela dos funcionários e os detalhes do laptop da tabela do laptop, mas apenas os detalhes do funcionário em que o salário é maior que 55.000. Realizamos a consulta de junção externa esquerda nessas duas tabelas. A consulta retornará valores nulos no lado direito da tabela se as linhas não forem semelhantes entre as tabelas.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO LAPTOPID NOME
1001 VAIBHAVI MISHRA 65500 NULO NULO
1002 VAIBHAV SHARMA 60.000 L102 HP
2001 PRAQUI SHARMA 55500 NULO NULO
2002 BHAVESH JAIN 65500 NULO NULO
3001 PRANOTI SHENDE 55500 NULO NULO
3003 DEEPAM JAUHARI 58500 L104 HP
4001 RAJESH GOUD 60500 NULO NULO
4003 RUCHIKA AGARWAL 60.000 L106 LENOVO
5001 ARQUIVO SHARMA 55500 L107 DELL

União Externa Direita

A junção externa direita retornará todos os registros da tabela no lado direito da junção e os registros correspondentes da tabela no lado esquerdo da junção. O conjunto de resultados contém null para os registros que não são comuns no lado esquerdo.

Sintaxe da junção externa direita:
SELECT        Table_Name1.Colum_Name1,     Table_Name1.Column_Name2, Table_Name1.Column_Name3,Table_Name2.Column_Name1,Table_Name2.Column_Name2, Table_Name2.Column_Name3, FROM Table_Name1 RIGHT OUTER JOIN Table_Name2 ON Table_Name1.Column_Name =Table_Name2.Column_Name;

Exemplos de SQL Right Outer Join

Exemplo 1: Execute uma consulta de junção externa direita na tabela dos funcionários e na tabela do laptop, onde exibe o ID do funcionário, o nome dos funcionários.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, L.LAPTOPID, L.NAME FROM EMPLOYEES E Right OUTER JOIN LAPTOP L ON E.EMPLOYEEID =L.EMPLOYEEID; 

Na consulta acima, exibimos o ID do funcionário, o primeiro nome, o sobrenome da tabela do ID do laptop do funcionário e o nome da tabela do laptop e realizamos a consulta de junção externa direita nessas duas tabelas. A consulta retornará valores nulos no lado esquerdo da tabela se as linhas não forem semelhantes entre as tabelas.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME LAPTOPID NOME
NULO NULO NULO L101 DELL
1002 VAIBHAV SHARMA L102 HP
NULO NULO NULO L103 LENOVO
3003 DEEPAM JAUHARI L104 HP
4002 ASHWINI BOLSA L105 DELL
4003 RUCHIKA AGARWAL L106 LENOVO
5001 ARQUIVO SHARMA L107 DELL
NULO NULO NULO L108 HP
NULO NULO NULO L109 DELL
NULO NULO NULO L110 HP

Exemplo 2: Escreva uma consulta para buscar id, nome e sobrenome do funcionário da tabela do funcionário. Junção externa direita na tabela do laptop onde o nome do laptop inclui uma das listas é Dell, HP.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, L.LAPTOPID, L.NAME FROM EMPLOYEES E RIGHT OUTER JOIN LAPTOP L ON E.EMPLOYEEID =L.EMPLOYEEID WHERE L.NAME IN (' DELL', 'HP');

Na consulta acima, exibimos os detalhes dos funcionários da tabela de detalhes do laptop do funcionário na mesa do laptop. Realizamos a consulta de junção externa correta nessas duas tabelas apenas para o funcionário cujo nome de laptop inclui uma das listas é Dell e HP. A consulta retornará valores nulos no lado esquerdo da tabela se as linhas não forem semelhantes entre as tabelas.

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME LAPTOPID NOME
NULO NULO NULO L101 DELL
1002 VAIBHAV SHARMA L102 HP
3003 DEEPAM JAUHARI L104 HP
4002 ASHWINI BOLSA L105 DELL
5001 ARQUIVO SHARMA L107 DELL
NULO NULO NULO L108 HP
NULO NULO NULO L109 DELL
NULO NULO NULO L110 HP

União Externa Completa

Full Outer Join mescla o resultado de Left Outer Joins e Right Outer Join. Full Outer Join é o mesmo que Cross Join. Full Outer Joins retorna a saída, onde as linhas são comuns ou incomuns entre as tabelas.

Sintaxe da junção externa completa:
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLE1 FULL JOIN TABLE2;

Exemplo 1: Escreva uma consulta para exibir o ID do funcionário, primeiro nome, sobrenome do ID do gerente da tabela do funcionário full outer join Tabela do gerente em que o salário do funcionário é maior que 65.000.
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, M.MANAGERID FROM EMPLOYEES FULL JOIN MANAGER M WHERE SALARY> 65000;

Na consulta acima, exibimos os detalhes dos funcionários e os detalhes do gerente da tabela de funcionários e gerentes em que o salário do funcionário é maior que 65.000 usando a junção total. Na íntegra, junte cada Linha da tabela do funcionário em cada Linha da tabela do gerente, ou seja, o produto cartesiano acontecerá. M * N

Saída:
EMPLOYEEID FIRST_NAME LAST_NAME GERENTE
1001 VAIBHAVI MISHRA 1
1001 VAIBHAVI MISHRA 2
1001 VAIBHAVI MISHRA 3
1001 VAIBHAVI MISHRA 4
1001 VAIBHAVI MISHRA 5
2002 BHAVESH JAIN 1
2002 BHAVESH JAIN 2
2002 BHAVESH JAIN 3
2002 BHAVESH JAIN 4
2002 BHAVESH JAIN 5

Como podemos ver, o ID de funcionário 1001 faz uma junção cruzada com cada ID de gerente, o mesmo que o ID de funcionário 2002.

Exemplo 2: Execute uma consulta de junção externa completa na tabela Employees e na tabela laptop, onde o salário do funcionário é maior que 60.000 e a localização do funcionário é Pune.
SELECT LAPTOPID, E.EMPLOYEEID, E.FIRST_NAME, E.SALARY, E.CITY FROM LAPTOP FULL JOIN EMPLOYEES E WHERE SALARY> 60000 AND CITY ='PUNE';

Na consulta acima, exibimos o ID do laptop, o ID do funcionário, o primeiro nome, o salário e a cidade dos funcionários de ingresso completo do laptop apenas aqueles cujo salário é maior que 60.000 e a cidade é Pune. Se ambas as condições corresponderem apenas ao funcionário, o registro será buscado.

Saída:

União cruzada

As junções cruzadas no SQL nada mais são do que chamadas de produto cartesiano. Cada Linha de uma tabela é combinada ou mesclada com cada Linha da outra tabela. M * N é junção cruzada

Sintaxe de junção cruzada:
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLE1 CROSS JOIN TABLE2;

Exemplo 1: Escreva uma consulta para executar a operação de junção cruzada na tabela de funcionários e na tabela de gerentes onde o primeiro nome do funcionário começa com A
SELECT EMPLOYEEID, FIRST_NAME, M.MANAGERID FROM EMPLOYEES CROSS JOIN MANAGER M WHERE FIRST_NAME LIKE 'A%';

No exemplo de consulta de junção externa completa acima, recuperamos os detalhes do funcionário e os detalhes do gerente da tabela de funcionários e da tabela de gerentes, mas apenas os registros em que o primeiro nome do funcionário começa com a letra 'A'.

Saída:

O resultado mostra que o ID do funcionário é uma junção cruzada com cada linha do ID do gerente.

M * N Aqui, M =3; ID de funcionário das tabelas de funcionários

N =5; ID do gerente da tabela do gerente 3 * 5 =15 linhas.

Exemplo 2: Escreva uma consulta para executar a operação de junção cruzada na tabela do laptop e na tabela de funcionários onde o salário do funcionário é maior que 58.000 e Mumbai.
SELECT LAPTOPID, NAME, E.EMPLOYEEID FROM LAPTOP CROSS JOIN EMPLOYEES E WHERE SALARY> 58000 AND CITY ='MUMBAI';

Na consulta acima, exibimos o ID do laptop, o nome e o ID do funcionário da tabela do laptop para realizar a operação de junção cruzada na tabela dos funcionários onde o salário do funcionário é maior que 58.000 e a cidade é Pune. A junção cruzada funciona como M * N.

Saída: