Database
 sql >> Base de données >  >> RDS >> Database

Sauf SQL

En SQL, nous utilisons probablement la clause JOIN pour recevoir le résultat combiné d'une ou de plusieurs tables. Mais parfois, nous voulons un résultat qui contient des données d'une table, et l'enregistrement ne doit pas être disponible dans l'autre table. Dans ce cas, SQL porte le nom de concept SQL Except.

Pour purifier les données de plusieurs tables, nous avons utilisé SQL Except. Le SQL Sauf est le même que l'opérateur moins que nous faisons en mathématiques. SQL Except fusionne d'abord les deux ou plusieurs instructions SELECT dans la requête et renvoie les données de la première instruction SELECT. Nous ne sommes pas disponibles dans un autre résultat d'instruction SELECT.

Règles SQL EXCEPT

Nous devons comprendre toutes les règles et réglementations avant d'utiliser la requête EXCEPT en SQL :

  • Le nombre et l'ordre des colonnes dans la table donnée doivent être les mêmes dans toute la requête SELECT.
  • Le type de données de la colonne doit être identique ou compatible.

La syntaxe de SQL EXCEPT

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Table1 et Table2 seront les noms des tables.

Exemple :

Supposons que nous ayons deux tables avec le même nombre de colonnes et le même ordre de colonnes.

  • Tableau 1 :T1, nombre de colonnes :3, données :A, B, C, D
  • Tableau 2 :T2, nombre de colonnes :3, données :B, D, F, G

Chaque fois que nous exécutons la requête EXCEPT sur ces deux tables, nous obtiendrons A et C car ces deux données ne sont pas présentes dans la table T2, B et D sont communs aux deux tables, ce qui les supprime.

Comprenons le concept SQL EXCEPT avec des exemples. Considérez les tableaux suivants avec les enregistrements donnés.

Tableau 1 :Emp

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4

Table 2 :Employé

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 Vaibhav Sharma 65000 PUNE ORACLE 1
1002 Nikhil Vani 60000 NOÏDA ORACLE 1
1003 Vaibhavi Mishra 50000 JAIPUR FMW 2
2001 Ruchika Jaïn 55500 CHANDIGAR ORACLE 1
2002 Prachi Sharma 65500 PUNE FMW 2
2003 Bhavesh Jaïn 50000 Bombay TEST 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA 50500 JAIPUR FMW 2
3003 Pranotti Shendé 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4

Table 3 :Gestionnaire

ID gestionnaire nom_du_responsable manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manich JAVA
4 Anupam Mishra TEST

Tableau 4 :Gestionnaire 1

ID gestionnaire nom_du_responsable manager_department
1 Ishita Agrawal ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manich JAVA
4 Paul Oakip TEST

Exemple 1 : Supposons que nous voulions joindre les deux tables ci-dessus Emp et Employee dans notre requête SELECT en utilisant l'opérateur 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;

Nous utilisons la clause INNER JOIN entre les tables Emp et Employee où nous affichons l'identifiant de l'employé, le nom, la ville, le service, l'identifiant du responsable et le nom du responsable à l'aide de l'opérateur EXCEPT. La requête ci-dessus n'affichera que les valeurs uniques entre les deux tables.

La requête ci-dessus donne le résultat suivant :

Si nous observons les données des tables, il existe deux données communes entre les deux tables, la table Emp et la table des employés, c'est-à-dire l'identifiant de l'employé 3002 et 4001. Les détails de l'identifiant de l'employé 4001 s'affichent à l'exception de 3002. Étant donné que l'identifiant de l'employé 3002, le nom du responsable est le même dans les deux tables. Responsable et Manager1 mais ID d'employé 4001 Les noms des managers sont différents dans les deux tables, les détails de l'ID d'employé 4002 sont affichés.

Exemple 2 : Supposons que nous voulions joindre les deux tables ci-dessus Emp et Employee dans notre requête SELECT en utilisant l'opérateur EXCEPT et trier le résultat défini par leur salaire dans l'ordre décroissant. Nous allons utiliser la clause ORDER BY pour trier le jeu de résultats dans la requête 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 requête ci-dessus affiche le résultat suivant :

Exemple 3 : Supposons que nous voulions joindre les deux tables ci-dessus Emp et Employee dans notre requête SELECT en utilisant l'opérateur EXCEPT où le salaire de l'employé supérieur à 55000 de la table Emp et la ville de l'employé incluent 'Pune', 'Mumbai', 'Jaipur' de la table Employee.

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

La première instruction SELECT de la requête ci-dessus récupère tous les détails des employés dont le salaire est supérieur à 55 000 dans la table Emp. La deuxième instruction SELECT récupère tous les détails des employés dont les villes incluent Pune, Mumbai, Jaipur à partir de la table Employee. Ensuite, l'opérateur EXCEPT sera exécuté entre la table Emp et la table Employee.

Cela donne la sortie suivante :