O operador usado para unir ou combinar duas consultas não é outro senão os operadores SET. Os operadores categorizados em operadores SET são os seguintes:
- Operador UNION.
- Operador UNION ALL'.
- Operador INTERSECT.
- Operador MENOS.
As regras a serem seguidas para operar usando o Operador SET são as seguintes:
- O número de colunas e a ordem das colunas devem ser iguais.
- O tipo de dados deve ser compatível.
Vamos entender cada um dos operadores SET com exemplos.
Considere as tabelas a seguir junto com os registros fornecidos.
Tabela 1:Funcionários
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE | WORKING_HOURS | GÊNERO |
1001 | VAIBHAVI | MISHRA | 65.000 | PUNE | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60.000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | NIQUIL | VANI | 50.000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRAQUI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 | 10 | F |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | TESTE | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | ONDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 | 10 | M |
Tabela 2:Funcionário.
EMPLOYEEID | FIRST_NAME | LAST_NAME | SALÁRIO | CIDADE | DEPARTAMENTO | GERENTE | WORKING_HOURS | GÊNERO |
1001 | Vaibhav | Sharma | 65.000 | PUNE | ORACLE | 1 | 12 | M |
1002 | Nikhil | Vani | 60.000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | Vaibhavi | Mishra | 50.000 | JAIPUR | FMW | 2 | 10 | F |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORACLE | 1 | 10 | F |
2002 | Praqui | Sharma | 65500 | PUNE | FMW | 2 | 12 | F |
2003 | Bhavesh | Jain | 50.000 | MUMBAI | TESTE | 4 | 9 | M |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 | 9 | M |
3002 | ANUJA | ONDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | Pranóti | Shende | 58500 | MUMBAI | JAVA | 3 | 12 | F |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTE | 4 | 10 | M |
Tabela 3:Gerente.
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTE |
Tabela 4:Gerente1.
Managerid | manager_name | manager_department |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | TESTE |
Operador UNIÃO
Operador UNION é o primeiro operador usado para mesclar ou combinar as duas ou mais instruções SELECT. Se e somente se o número de colunas e a ordem das colunas forem iguais.
As linhas duplicadas não serão consideradas no resultado obtido após a execução da operação UNION.
A sintaxe para a operação UNION é a seguinte,
SELECT * FROM TABLE_NAME1 UNION SELECT * FROM TABLE_NAME2;
Exemplo 1: Execute uma consulta para realizar a operação UNION entre a tabela Employees e a tabela Employee.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT recupera os dados dos funcionários e a segunda consulta SELECT recupera os dados dos dados dos funcionários, e a operação UNION é executada em ambas as consultas SELECT.
A operação UNION descartará linhas duplicadas entre ambas as tabelas. A seguinte saída é mostrada como:
Ambos os registros da tabela são exibidos, exceto os registros duplicados.
Exemplo 2: Execute uma consulta para realizar a operação UNION entre a tabela Employees e a tabela Employee. Mas exiba apenas os registros de funcionários da tabela de funcionários que pertencem à cidade de Mumbai e da tabela de funcionários apenas os registros de funcionários cujo salário do funcionário é maior que 50.000 e menor que 60.000.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION SELECT * FROM EMPLOYEE WHERE SALARY > 50000 AND SALARY < 60000;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca apenas os registros cujo funcionário pertence à cidade de Mumbai da tabela Funcionários. E executar a operação UNION com a segunda consulta SELECT busca apenas os registros cujo salário do funcionário é maior que 50.000, mas menor que 60.000 da tabela de funcionários. A operação UNION descartará linhas duplicadas entre ambas as tabelas.
A seguinte saída é mostrada como:
Ambos os registros da tabela são exibidos, exceto os registros duplicados.
Exemplo 3: Execute uma consulta para realizar a operação UNION entre a tabela Employees e a tabela Employee. Queremos apenas os registros da tabela Funcionários cuja cidade do funcionário pertença a 'Pune' e 'Jaipur'.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'JAIPUR') UNION SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os registros cujos funcionários pertencem à cidade 'Pune' e 'Jaipur' da tabela Employees. A operação UNION é realizada com os registros recuperados da segunda consulta SELECT da tabela empregado.
A operação UNION descartará linhas duplicadas entre ambas as tabelas. A seguinte saída é mostrada como:
Como todos podemos ver, os primeiros cinco registros do resultado são os funcionários que pertencem à cidade de Pune ou Jaipur. E os registros de descanso são da tabela de funcionários, a segunda consulta SELECT.
Ambos os registros da tabela são exibidos, exceto os registros duplicados.
Exemplo 4: Execute uma consulta para realizar a operação UNION entre a tabela Employees e a tabela Employee. Queremos apenas os registros da tabela Employee cujo nome de funcionário comece com V.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE WHERE FIRST_NAME LIKE 'V%';
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca todos os registros da tabela Employees. A operação UNION é realizada com os registros recuperados da segunda consulta SELECT da tabela empregado cujo primeiro nome começa com 'V'.
A operação UNION descartará linhas duplicadas entre ambas as tabelas. A seguinte saída é mostrada como:
Como todos nós podemos, os primeiros 10 resultados são da tabela Employees, e o restante é da tabela Employee cujo primeiro nome do funcionário começa com 'V'.
Exemplo 5: Execute uma consulta para realizar a operação UNION entre a tabela Manager e a tabela Manager1.
SELECT * FROM MANAGER UNION SELECT * FROM MANAGER1;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT recupera os dados do Manager e a segunda consulta SELECT recupera os dados dos dados do manager1, e a operação UNION é executada em ambas as consultas SELECT.
A operação UNION descartará linhas duplicadas entre ambas as tabelas. A seguinte saída é mostrada como:
Ambos os registros da tabela são exibidos, exceto os registros duplicados.
UNION ALL Operadores
O operador UNION ALL combina todos os dados de ambas as consultas. No operador UNION, registros duplicados não foram considerados no resultado, mas UNION ALL considerou registros duplicados no resultado obtido após a execução da operação UNION ALL.
A sintaxe para a operação UNION ALL é a seguinte,
SELECT * FROM TABLE_NAME1 UNION ALL SELECT * FROM TABLE_NAME2;
Exemplo 1: Execute uma consulta para realizar a operação UNION ALL entre a tabela Employees e a tabela Employee.
SELECT * FROM EMPLOYEES UNION ALL SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados dos funcionários e executa a operação UNION ALL com os dados buscados pela segunda consulta SELECT recupera os dados da tabela de funcionários.
A seguinte saída é mostrada como:
Todos os registros serão exibidos nas tabelas Employees e Employee, registros duplicados também serão exibidos à medida que realizamos a operação UNION ALL.
Exemplo 2: Execute uma consulta para realizar a operação UNION ALL entre a tabela Employees e a tabela Employee. Mas exiba apenas os registros dos funcionários da tabela de funcionários que pertencem à cidade de Mumbai. Na tabela de funcionários, apenas os registros dos funcionários cujo salário do funcionário é 60.500 e a cidade é 'Mumbai'.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION ALL SELECT * FROM EMPLOYEE WHERE SALARY = 60500 AND CITY = 'MUMBAI';
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca apenas os registros cujo funcionário pertence à cidade de Mumbai da tabela Funcionários. E executar a operação UNION ALL com a segunda consulta SELECT busca apenas os registros cujo salário do funcionário é 60500 e a cidade é 'Mumbai' da tabela de funcionários.
A seguinte saída é mostrada como:
Ambos os registros da tabela são exibidos, incluindo registros duplicados à medida que executamos as operações UNION ALL.
Exemplo 3: Execute uma consulta para realizar a operação UNION entre a tabela Employees e a tabela Employee. Queremos apenas os registros da tabela Funcionários cuja cidade do funcionário pertença a 'Pune', 'Mumbai' e 'Jaipur'.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') UNION ALL SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os registros cujos funcionários pertencem à cidade 'Pune', 'Mumbai' e 'Jaipur' da tabela Employees. A operação UNION ALL é realizada com os registros recuperados da segunda consulta SELECT da tabela empregado.
A seguinte saída é mostrada como:
Ambos os registros da tabela são exibidos, incluindo registros duplicados à medida que executamos as operações UNION ALL.
Exemplo 4: Execute uma consulta para realizar a operação UNION ALL entre a tabela Manager e a tabela Manager1.
SELECT * FROM MANAGER UNION ALL SELECT * FROM MANAGER1;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados do Manager e executa as operações UNION ALL com os dados buscados pela segunda consulta SELECT recupera os dados da tabela manager1.
A seguinte saída é mostrada como:
Todos os registros serão exibidos nas tabelas Manager e Manager1; registros duplicados são exibidos à medida que executamos as operações UNION ALL.
Operadores INTERSECT
O operador Intersect é usado para combinar duas ou mais instruções SELECT, mas exibe apenas os dados semelhantes à instrução SELECT.
A sintaxe para a operação INTERSECT é a seguinte,
SELECT * FROM TABLE_NAME1 INTERSECT SELECT * FROM TABLE_NAME2;
Exemplo 1: Execute uma consulta para realizar a operação INTERSECT entre a tabela Employees e a tabela Employee.
SELECT * FROM EMPLOYEES INTERSECT SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados dos funcionários e executa a operação INTERSECT com os dados buscados pela segunda consulta SELECT recupera os dados da tabela de funcionários.
A seguinte saída é mostrada como:
Somente registros semelhantes serão exibidos em ambas as tabelas, pois realizamos a operação INTERSECT entre a tabela Employees e a tabela Employee.
Exemplo 2: Execute uma consulta para realizar a operação INTERSECT entre a tabela Manager e a tabela Manager1.
SELECT * FROM MANAGER INTERSECT SELECT * FROM MANAGER1;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados do Manager e executa a operação INTERSECT com os dados buscados pela segunda consulta SELECT recupera os dados da tabela Manager1.
A seguinte saída é mostrada como:
Apenas registros semelhantes serão exibidos de ambas as tabelas, pois realizamos a operação INTERSECT entre a tabela Manager e a tabela Manager1.
Operadores MENOS
O operador MINUS é usado para retornar as linhas presentes na primeira consulta, mas ausentes no restante das consultas sem duplicatas.
A sintaxe para a operação MENOS é a seguinte.
SELECT * FROM TABLE_NAME1 EXCEPT SELECT * FROM TABLE_NAME2;
Observação: A palavra-chave MINUS é suportada apenas em bancos de dados ORACLE. Podemos usar a palavra-chave EXCEPT para que outros bancos de dados executem uma operação semelhante.
Exemplo 1: Execute uma consulta para realizar a operação MENOS entre a tabela Employees e a tabela Employee.
SELECT * FROM EMPLOYEES EXCEPT SELECT * FROM EMPLOYEE;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados dos funcionários e executa a operação MINUS com os dados buscados pela segunda consulta SELECT recupera os dados da tabela de funcionários.
A seguinte saída é mostrada como:
Apenas registros não correspondentes serão exibidos em ambas as tabelas, pois realizamos a operação MENOS entre a tabela Funcionários e a tabela Funcionário.
Exemplo 2: Execute uma consulta para realizar a operação MENOS entre a tabela Manager e a tabela Manager1.
SELECT * FROM MANAGER EXCEPT SELECT * FROM MANAGER1;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados do Manager e executa a operação MINUS com os dados buscados pela segunda consulta SELECT recupera os dados da tabela Manager1.
A seguinte saída é mostrada como:
Somente registros não correspondentes serão exibidos em ambas as tabelas, pois realizamos a operação MENOS entre a tabela Manager e a tabela Manager1.