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

SQL exceto


Em SQL, provavelmente usamos a cláusula JOIN para receber o resultado combinado de uma ou mais tabelas. Mas, às vezes, queremos um resultado que contenha dados de uma tabela e o registro não esteja disponível na outra tabela. Nesse caso, SQL tem o nome de conceito SQL Except.

Para purificar os dados de mais de uma tabela, usamos SQL Except. O SQL Except é o mesmo que o operador de menos que fazemos em matemática. SQL Except primeiro mescla as duas ou mais de duas instruções SELECT na consulta e retorna os dados da primeira instrução SELECT. Não estamos disponíveis em outro resultado de instrução SELECT.

Regras de SQL EXCEPT


Devemos entender todas as regras e regulamentos antes de usar a consulta EXCEPT no SQL:
  • O número e a ordem das colunas na tabela fornecida devem ser os mesmos em toda a consulta SELECT.
  • O tipo de dados da coluna deve ser o mesmo ou compatível.

A sintaxe para SQL EXCETO
SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Tabela1 e Tabela2 serão os nomes das tabelas.

Exemplo:

Suponha que temos duas tabelas com o mesmo número de colunas e a mesma ordem das colunas.
  • Tabela 1:T1, Número de colunas:3, Dados:A, B, C, D
  • Tabela 2:T2, Número de colunas:3, Dados:B, D, F, G

Sempre que executarmos a consulta EXCEPT nessas duas tabelas, obteremos A e C porque esses dois dados não estão presentes na tabela T2, B e D são comuns nas duas tabelas, que descartam.

Vamos entender o conceito SQL EXCEPT com exemplos. Considere as tabelas a seguir junto com os registros fornecidos.

Tabela 1:Emp

EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA ONDE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4

Tabela 2:Funcionário

EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 Vaibhav Sharma 65.000 PUNE ORACLE 1
1002 Nikhil Vani 60.000 NOIDA ORACLE 1
1003 Vaibhavi Mishra 50.000 JAIPUR FMW 2
2001 Ruchika Jain 55500 CHANDIGARH ORACLE 1
2002 Praqui Sharma 65500 PUNE FMW 2
2003 Bhavesh Jain 50.000 MUMBAI TESTE 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA ONDE 50500 JAIPUR FMW 2
3003 Pranóti Shende 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4

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

Exemplo 1: Suponha que queremos unir as duas tabelas Emp e Employee acima em nossa consulta SELECT usando o operador EXCEPT.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID;

Estamos usando a cláusula INNER JOIN entre a tabela Emp e Employee onde exibimos Employee Id, Name, City, Department, Manager Id e Manager Name usando o operador EXCEPT. A consulta acima exibirá apenas os valores exclusivos entre as duas tabelas.

A consulta acima fornece a seguinte saída:

Se observarmos os dados das tabelas, há dois dados comuns entre as duas tabelas Emp table e Employee table, ou seja, Employee id 3002 e 4001. Os detalhes do Employee id 4001 são exibidos, exceto 3002. Como o Employee id 3002 Manager name é o mesmo em ambas as tabelas Manager e Manager1, mas ID do funcionário 4001 Os nomes dos gerentes são diferentes em ambas as tabelas, os detalhes da ID do funcionário 4002 são exibidos.

Exemplo 2: Suponha que queremos unir as duas tabelas Emp e Employee acima em nossa consulta SELECT usando o operador EXCEPT e classificar o resultado definido por seu salário em ordem decrescente. Usaremos a cláusula ORDER BY para classificar o conjunto de resultados na consulta SQL.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID ORDER BY SALARY;

A consulta acima mostra a seguinte saída:

Exemplo 3: Suponha que queremos unir as duas tabelas Emp e Employee acima em nossa consulta SELECT usando o operador EXCEPT, onde o salário do funcionário maior que 55.000 da tabela Emp e a cidade do funcionário incluem 'Pune', 'Mumbai', 'Jaipur' da tabela Employee.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');   

A primeira instrução SELECT da consulta acima busca todos os detalhes dos funcionários cujo salário é maior que 55.000 da tabela Emp. A segunda instrução SELECT busca todos os detalhes dos funcionários cujas cidades incluem Pune, Mumbai, Jaipur da tabela Employee. Então, o operador EXCEPT será executado entre a tabela Emp e a tabela Employee.

Isso dá a seguinte saída: