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 | OÙ | 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 | OÙ | 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 :