Database
 sql >> Datenbank >  >> RDS >> Database

SQL-Ausnahme

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: