In SQL verwenden wir wahrscheinlich die JOIN-Klausel, um das kombinierte Ergebnis aus einer oder mehreren Tabellen zu erhalten. Aber manchmal möchten wir ein Ergebnis, das Daten aus einer Tabelle enthält, und der Datensatz sollte in der anderen Tabelle nicht verfügbar sein. In diesem Fall hat SQL den Konzeptnamen SQL Except.
Um die Daten aus mehr als einer Tabelle zu bereinigen, haben wir SQL Except verwendet. Der SQL-Ausnahme ist derselbe wie der Minusoperator, den wir in der Mathematik verwenden. SQL Except führt zuerst die zwei oder mehr als zwei SELECT-Anweisungen in der Abfrage zusammen und gibt die Daten aus der ersten SELECT-Anweisung zurück. Wir sind in keinem anderen SELECT-Anweisungsergebnis verfügbar.
SQL EXCEPT-Regeln
Wir sollten alle Regeln und Vorschriften verstehen, bevor wir die EXCEPT-Abfrage in SQL verwenden:
- Die Anzahl und Reihenfolge der Spalten in der angegebenen Tabelle muss in der gesamten SELECT-Abfrage gleich sein.
- Der Datentyp der Spalte muss gleich oder kompatibel sein.
Die Syntax für SQL EXCEPT
SELECT * FROM table1 EXCEPT SELECT * FROM table2;
Table1 und Table2 sind die Namen der Tabellen.
Beispiel:
Angenommen, wir haben zwei Tabellen mit der gleichen Spaltenanzahl und Spaltenreihenfolge.
- Tabelle 1:T1, Anzahl der Spalten:3, Daten:A, B, C, D
- Tabelle 2:T2, Anzahl der Spalten:3, Daten:B, D, F, G
Immer wenn wir die EXCEPT-Abfrage für diese beiden Tabellen ausführen, erhalten wir A und C, da diese beiden Daten nicht in Tabelle T2 vorhanden sind, B und D in beiden Tabellen gemeinsam sind, die verworfen werden.
Lassen Sie uns das SQL EXCEPT-Konzept anhand von Beispielen verstehen. Betrachten Sie die folgenden Tabellen zusammen mit den angegebenen Datensätzen.
Tabelle1:Emp
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WO | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
Tabelle2:Mitarbeiter
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | Vaibhav | Sharma | 65000 | PUNE | ORACLE | 1 |
1002 | Nikhil | Vani | 60000 | NOIDA | ORACLE | 1 |
1003 | Vaibhavi | Mishra | 50000 | JAIPUR | FMW | 2 |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | Prach | Sharma | 65500 | PUNE | FMW | 2 |
2003 | Bhavesh | Jain | 50000 | MUMBAI | TESTEN | 4 |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WO | 50500 | JAIPUR | FMW | 2 |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
Tabelle3:Manager
Manager-ID | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTEN |
Tabelle4:Manager1
Manager-ID | manager_name | manager_department |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | TESTEN |
Beispiel 1: Angenommen, wir möchten die beiden obigen Tabellen Emp und Employee in unserer SELECT-Abfrage mit dem EXCEPT-Operator verbinden.
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;
Wir verwenden die INNER JOIN-Klausel zwischen der Emp- und der Employee-Tabelle, in der wir die Mitarbeiter-ID, den Namen, die Stadt, die Abteilung, die Manager-ID und den Managernamen mit dem EXCEPT-Operator anzeigen. Die obige Abfrage zeigt nur diese eindeutigen Werte zwischen beiden Tabellen an.
Die obige Abfrage ergibt die folgende Ausgabe:
Wenn wir die Tabellendaten beobachten, gibt es zwei gemeinsame Daten zwischen den beiden Tabellen Emp-Tabelle und Mitarbeitertabelle, d. h. Mitarbeiter-ID 3002 und 4001. Die Mitarbeiter-ID 4001 wird mit Ausnahme von 3002 angezeigt. Da die Mitarbeiter-ID 3002 der Name des Managers in beiden Tabellen Manager gleich ist und Manager1, aber Mitarbeiter-ID 4001 Managernamen sind in beiden Tabellen unterschiedlich, Mitarbeiter-ID 4002 werden angezeigt.
Beispiel 2: Angenommen, wir möchten die beiden obigen Tabellen Emp und Employee in unserer SELECT-Abfrage mit dem EXCEPT-Operator zusammenführen und die Ergebnismenge nach ihrem Gehalt in absteigender Reihenfolge sortieren. Wir verwenden die ORDER BY-Klausel, um die Ergebnismenge in der SQL-Abfrage zu sortieren.
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;
Die obige Abfrage zeigt die folgende Ausgabe:
Beispiel 3: Angenommen, wir möchten die beiden obigen Tabellen Emp und Employee in unserer SELECT-Abfrage mit dem EXCEPT-Operator zusammenführen, wobei das Mitarbeitergehalt von mehr als 55000 aus der Emp-Tabelle und die Stadt des Mitarbeiters „Pune“, „Mumbai“, „Jaipur“ aus der Employee-Tabelle enthalten.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');
Die obige Abfrage-erste-SELECT-Anweisung ruft alle Details der Angestellten ab, deren Gehalt größer als 55000 ist, aus der Emp-Tabelle. Die zweite SELECT-Anweisung ruft alle Details der Angestellten ab, deren Städte Pune, Mumbai, Jaipur aus der Employee-Tabelle enthalten. Dann wird der EXCEPT-Operator zwischen der Emp-Tabelle und der Employee-Tabelle ausgeführt.
Dies ergibt die folgende Ausgabe: