Neste artigo, aprenderemos sobre o conceito INNER JOIN e como usá-lo em SQL com a cláusula WHERE.
O que é INNER JOIN em SQL?
Inner Join é um tipo de join no SQL. Inner Join no SQL é uma junção amplamente usada. Essa junção retorna apenas as linhas que são comuns em ambas as tabelas. A junção interna é usada para unir duas tabelas.
Sintaxe de Inner Join no SQL:
SELECT table1.columname1, table1.columnname2, table2.columnname1, table2.columnname2 FROM TABLE1 INNER JOIN TABLE2 ON table1.column = table2.column;
Table1.column =table2.column é a coluna comum que mantém o relacionamento pai-filho entre essas duas tabelas.
Existem alguns passos que temos que usar no Inner Join na consulta SQL:
1. Crie um novo banco de dados ou use um banco de dados existente selecionando o banco de dados usando a palavra-chave USE seguida do nome do banco de dados.
2. Crie uma nova tabela dentro do banco de dados selecionado, ou você pode usar uma tabela já criada.
3. Se a tabela for recém-criada, insira os registros no banco de dados recém-criado usando a consulta INSERT.
4. Visualize os dados inseridos usando a consulta SELECT sem a consulta Inner Join.
5 Agora, estamos prontos para usar o Inner Join nas consultas SQL.
Etapa 1:crie um novo banco de dados ou use um banco de dados já criado.
Já criei um banco de dados. Usarei meu nome de banco de dados criado existente, Empresa.
USE Company;
Empresa é o nome do banco de dados.
Quem não criou um banco de dados segue a consulta abaixo para criar o banco de dados:
CREATE DATABASE database_name;
Após criar o banco de dados, selecione o banco de dados usando a palavra-chave USE seguida do nome do banco de dados.
Etapa 2:crie uma nova tabela ou use uma tabela já existente:
Já criei uma tabela. Usarei a tabela existente chamada Employees and Manager, pois estamos executando a consulta Inner Join.
Para criar a nova tabela, siga a sintaxe CREATE TABLE abaixo:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Etapa 3:insira os registros na tabela recém-criada usando a consulta INSERT
Use a sintaxe abaixo para inserir novos registros na tabela:
INSERT INTO table_name VALUES(value1, value2, value3);
Etapa 4: Visualize os registros usando a consulta SELECT.
Visualize os registros da tabela usando a seguinte sintaxe:
SELECT * FROM table_name;
A consulta a seguir exibirá os registros de Funcionários.
SELECT * FROM Employees;
A saída da consulta SELECT acima é:
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 |
5002 | SANKET | CHAUHAN | 70.000 | HYDERABAD | JAVA | 3 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTE | 4 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
6003 | NIKITA | INGALE | 65.000 | HYDERABAD | ORACLE | 1 |
A consulta a seguir exibirá os registros do Manager.
SELECT * FROM Manager;
A saída da consulta SELECT acima é:
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# |
A consulta a seguir exibirá os registros do Laptop.
SELECT * FROM Laptop;
A saída da consulta SELECT acima é:
LAPTOPID | NOME | EMPREGADO |
101 | DELL | NULO |
102 | HP | 1002 |
103 | LENOVO | NULO |
104 | HP | 3003 |
105 | DELL | 4002 |
106 | LENOVO | 4003 |
107 | DELL | 5001 |
108 | HP | NULO |
109 | DELL | NULO |
110 | HP | NULO |
111 | LENOVO | 2002 |
112 | LENOVO | 6003 |
113 | HP | 1003 |
Etapa 5:estamos prontos para usar o INNER JOIN nas consultas
Vamos entender o Inner Join com a ajuda de exemplos.
Exemplo 1: Escreva uma consulta para exibir o ID do funcionário, nome, sobrenome, salário, cidade da tabela do funcionário e ID do gerente e nome do gerente da tabela do gerente usando a junção interna.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, E.CITY, 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, cidade 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. A coluna id do gerente funciona como uma chave estrangeira na tabela do funcionário. O ID do gerenciador funciona como a chave primária na tabela do gerenciador, que cria um relacionamento pai-filho entre as duas tabelas.
A saída da consulta acima é:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
6003 | NIKITA | INGALE | 65.000 | HYDERABAD | ORACLE | 1 |
1003 | NIQUIL | VANI | 50500 | JAIPUR | FMW | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | QUERER | 50500 | JAIPUR | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BOLSA | 54500 | NOIDA | JAVA | 3 |
5002 | SANKET | CHAUHAN | 70.000 | HYDERABAD | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
5001 | ARQUIVO | SHARMA | 55500 | DÉLHI | TESTE | 4 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTE | 4 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
Os registros são exibidos em ordem crescente por ID de gerente padrão.
Exemplo 2: Escreva uma consulta para exibir a ID do funcionário, nome, sobrenome, cidade e departamento da tabela do funcionário e a ID do gerente e o nome do gerente da tabela do gerente usando Inner Join onde o departamento do funcionário é C#.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.CITY, E.DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE DEPARTMENT = ‘C#’;
Na consulta acima, buscamos o ID do funcionário, nome, sobrenome, cidade 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 de funcionários é igual ao ID do gerente apenas da tabela do gerente os registros de funcionários cujo departamento de funcionários é C#.
A saída da consulta acima é:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
Na saída acima, podemos ver que apenas os registros são recuperados de funcionários cujo departamento é C#. Usamos a cláusula WHERE com a junção INNER.
Exemplo 3: Escreva uma consulta para exibir o ID do funcionário, nome, salário, cidade e departamento da tabela do funcionário e o ID do laptop e o nome do laptop da tabela do laptop usando o Inner Join.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.SALARY, E.CITY, E.DEPARTMENT, L.LAPTOPID, L.NAME FROM EMPLOYEES E INNER JOIN LAPTOP L ON E.EMPLOYEEID = L.EMPLOYEEID;
Na consulta acima, buscamos o ID do funcionário, o primeiro nome, o salário, a cidade e o departamento da tabela de funcionários e 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.
A saída da consulta acima é:
EMPLOYEEID | FIRST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | LAPTOPID | NOME |
1002 | VAIBHAV | 60.000 | NOIDA | C# | 102 | HP |
3003 | DEEPAM | 58500 | MUMBAI | JAVA | 104 | HP |
4002 | ASHWINI | 54500 | NOIDA | JAVA | 105 | DELL |
4003 | RUCHIKA | 60.000 | DÉLHI | ORACLE | 106 | LENOVO |
5001 | ARQUIVO | 55500 | DÉLHI | TESTE | 107 | DELL |
2002 | BHAVESH | 65500 | PUNE | FMW | 111 | LENOVO |
6003 | NIKITA | 65.000 | HYDERABAD | ORACLE | 112 | LENOVO |
1003 | NIQUIL | 50500 | JAIPUR | FMW | 113 | HP |
Apenas esses registros são exibidos na saída dada a quem o Laptop é atribuído.
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 e o ID do gerente e o nome do gerente da tabela do gerente usando a junção interna em que salário> 57000 ou 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 > 57000 OR DEPARTMENT = 'ORACLE';
Na consulta acima, buscamos o ID do funcionário, o primeiro nome, o salário e o departamento da tabela do funcionário, e o ID do gerente e o nome do gerente da tabela do gerente, onde o ID do gerente da tabela de funcionários é igual ao ID do gerente do gerente apenas os funcionários cujos o salário é maior que 57.000 ou o Departamento é Oracle.
A saída da consulta acima é:
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60.000 | DÉLHI | ORACLE | 1 |
6003 | NIKITA | INGALE | 65.000 | HYDERABAD | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
5002 | SANKET | CHAUHAN | 70.000 | HYDERABAD | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
Na saída acima, são exibidos apenas os registros de funcionários cujo salário é maior que 57.000 ou o departamento de funcionários é 'Oracle'. O operador OR exibe registros se uma das condições fornecidas na consulta for verdadeira.