In SQLite ist das EXCEPT
Operator kann verwendet werden, um ein zusammengesetztes SELECT
zu erstellen -Anweisung, die die Teilmenge der vom linken SELECT
zurückgegebenen Zeilen zurückgibt die nicht vom Recht SELECT
zurückgegeben werden .
Beispiel
Angenommen, wir haben die folgenden Tabellen:
SELECT * FROM Teachers;
SELECT * FROM Students;
Ergebnis:
TeacherId TeacherName --------- ----------- 1 Warren 2 Ben 3 Cathy 4 Cathy 5 Bill 6 Bill StudentId StudentName --------- ----------- 1 Faye 2 Jet 3 Spike 4 Ein 5 Warren 6 Bill
Wir können den EXCEPT
verwenden Operator, um Lehrer zurückzugeben, die nicht gleichzeitig Schüler sind:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Ergebnis:
TeacherName ----------- Ben Cathy
Wir erhalten also nur Werte, die in Teachers
vorkommen Tabelle, die nicht auch in den Students
erscheinen Tisch.
Wir können unterschiedliche Ergebnisse erhalten, je nachdem, welche Tabelle links und welche rechts ist. Hier ist ein Beispiel, das Students
einfügt Tisch links und Teachers
rechts:
SELECT StudentName FROM Students
EXCEPT
SELECT TeacherName FROM Teachers;
Ergebnis:
StudentName ----------- Ein Faye Jet Spike
Diesmal bekommen wir Schüler, die nicht gleichzeitig Lehrer sind.
EXCEPT
von SQLite -Operator gibt nur eindeutige Zeilen zurück. In unserem Beispiel wird also nur eine Zeile für Cathy
zurückgegeben , obwohl es zwei Lehrer mit diesem Namen gibt.
Einige andere RDBMS erlauben es uns, Duplikate in das Ergebnis aufzunehmen, indem wir einen optionalen ALL
akzeptieren Stichwort mit ihrem EXCEPT
-Operator, aber SQLite nicht (zumindest nicht zum Zeitpunkt des Schreibens). Fühlen Sie sich frei, die SQLite-Dokumentation zu überprüfen, falls sich etwas ändert.
Eine Alternative
Es ist möglich, das gleiche Ergebnis zu erhalten, ohne EXCEPT
zu verwenden Operator. Zum Beispiel könnten wir unser erstes Beispiel so umschreiben:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Ergebnis:
TeacherName ----------- Ben Cathy