sql >> Base de Datos >  >> RDS >> Database

SQL excepto

En SQL, probablemente usamos la cláusula JOIN para recibir el resultado combinado de una o más tablas. Pero a veces, queremos un resultado que contenga datos de una tabla y el registro no debería estar disponible en la otra tabla. En ese caso, SQL tiene el nombre de concepto SQL excepto.

Para depurar los datos de más de una tabla, usamos SQL Except. El SQL Except es el mismo que el operador menos que hacemos en matemáticas. SQL Except primero fusiona las dos o más de las dos declaraciones SELECT en la consulta y devuelve los datos de la primera declaración SELECT. No estamos disponibles en otro resultado de declaración SELECT.

Reglas EXCEPTO de SQL

Debemos entender todas las reglas y regulaciones antes de usar la consulta EXCEPT en SQL:

  • El número y orden de las columnas en la tabla dada debe ser el mismo en toda la consulta SELECT.
  • El tipo de datos de la columna debe ser el mismo o compatible.

La sintaxis de SQL EXCEPTO

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Table1 y Table2 serán el nombre de las tablas.

Ejemplo:

Supongamos que tenemos dos tablas con el mismo número de columnas y el mismo orden de columnas.

  • Tabla 1:T1, Número de columnas:3, Datos:A, B, C, D
  • Tabla 2:T2, Número de columnas:3, Datos:B, D, F, G

Siempre que ejecutemos la consulta EXCEPT en estas dos tablas, obtendremos A y C porque estos dos datos no están presentes en la tabla T2, B y D son comunes en ambas tablas, que se descartan.

Comprendamos el concepto EXCEPTO de SQL con ejemplos. Considere las siguientes tablas junto con los registros proporcionados.

Tabla 1:Emp

ID DE EMPLEADO FIRST_NAME APELLIDO SALARIO CIUDAD DEPARTAMENTO ID DE ADMINISTRADOR
1001 VAIBHAVI MISHRA 65000 PUNE ORACULO 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACULO 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGARH ORACULO 1
2002 BHAVESH JAÍN 65500 PUNE FMW 2
2003 RUCHIKA JAÍN 50000 BOMBAY PRUEBA 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA DÓNDE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 BOMBAY JAVA 3
4001 RAJESH GOUD 60500 BOMBAY PRUEBA 4

Tabla 2:Empleado

ID DE EMPLEADO FIRST_NAME APELLIDO SALARIO CIUDAD DEPARTAMENTO ID DE ADMINISTRADOR
1001 Vaibhav Sharma 65000 PUNE ORACULO 1
1002 Nikhil Vani 60000 NOIDA ORACULO 1
1003 Vaibhavi Mishra 50000 JAIPUR FMW 2
2001 Ruchika Jainista 55500 CHANDIGARH ORACULO 1
2002 Prachi Sharma 65500 PUNE FMW 2
2003 Bhavesh Jainista 50000 BOMBAY PRUEBA 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA DÓNDE 50500 JAIPUR FMW 2
3003 Pranoti Shende 58500 BOMBAY JAVA 3
4001 RAJESH GOUD 60500 BOMBAY PRUEBA 4

Tabla 3:Gerente

Administrador nombre_administrador gerente_departamento
1 Snehdeep Kaur ORACULO
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra PRUEBA

Tabla 4:Gerente1

Administrador nombre_administrador gerente_departamento
1 Ishita Agrawal ORACULO
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Paul Oip PRUEBA

Ejemplo 1: Supongamos que queremos unir las dos tablas anteriores Emp y Employee en nuestra consulta SELECT usando el 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 la cláusula INNER JOIN entre la tabla Emp y Employee donde mostramos la identificación del empleado, el nombre, la ciudad, el departamento, la identificación del gerente y el nombre del gerente usando el operador EXCEPT. La consulta anterior mostrará solo los valores únicos entre ambas tablas.

La consulta anterior da el siguiente resultado:

Si observamos los datos de las tablas, hay dos datos comunes entre ambas tablas, la tabla Emp y la tabla de empleados, es decir, ID de empleado 3002 y 4001. Los detalles de ID de empleado 4001 se muestran excepto 3002. Debido a que ID de empleado 3002, el nombre del gerente es el mismo en ambas tablas Gerente y Manager1 pero ID de empleado 4001 Los nombres de los gerentes son diferentes en ambas tablas, se muestran los detalles de ID de empleado 4002.

Ejemplo 2: Supongamos que queremos unir las dos tablas anteriores Emp y Employee en nuestra consulta SELECT usando el operador EXCEPT y ordenar el conjunto de resultados por su salario en orden descendente. Usaremos la cláusula ORDER BY para ordenar el conjunto de resultados en la 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;

La consulta anterior muestra el siguiente resultado:

Ejemplo 3: Supongamos que queremos unir las dos tablas anteriores Emp y Employee en nuestra consulta SELECT usando el operador EXCEPT donde el salario del empleado mayor a 55000 de la tabla Emp y la ciudad del empleado incluyen 'Pune', 'Mumbai', 'Jaipur' de la tabla Employee.

SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');   

La primera instrucción SELECT de la consulta anterior obtiene todos los detalles de aquellos empleados cuyo salario es superior a 55000 de la tabla Emp. La segunda declaración SELECT obtiene todos los detalles de aquellos empleados cuyas ciudades incluyen Pune, Mumbai, Jaipur de la tabla de empleados. Luego, se ejecutará el operador EXCEPT entre la tabla Emp y la tabla Employee.

Esto da el siguiente resultado: