In der Oracle-Datenbank das MINUS
Der Operator wird verwendet, um nur eindeutige Zeilen zurückzugeben, die von der ersten Abfrage zurückgegeben wurden, nicht jedoch von der zweiten.
Beispiel
Angenommen, wir haben die folgenden Tabellen:
SELECT * FROM Teachers;
SELECT * FROM Students;
Ergebnis:
LEHRERID | LEHRERNAME |
---|---|
1 | Warren |
2 | Ben |
3 | Cathy |
4 | Cathy |
5 | Rechnung |
6 | Rechnung |
STUDENTID | STUDENTENNAME |
---|---|
1 | Faye |
2 | Jet |
3 | Spitze |
4 | Ein |
5 | Warren |
6 | Rechnung |
Wir können das MINUS
verwenden Operator, um Lehrer zurückzugeben, die nicht gleichzeitig Schüler sind:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Ergebnis:
LEHRERNAME |
---|
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
MINUS
SELECT TeacherName FROM Teachers;
Ergebnis:
STUDENTENNAME |
---|
Ein |
Faye |
Jet |
Spitze |
Diesmal bekommen wir Schüler, die nicht gleichzeitig Lehrer sind.
Das MINUS
-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.
Eine Alternative
Es ist möglich, das gleiche Ergebnis zu erhalten, ohne den MINUS
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:
LEHRERNAME |
---|
Ben |
Cathy |
MINUS
Äquivalente in anderen RDBMSs
Oracles MINUS
Der Operator ähnelt dem EXCEPT
Operator, den viele andere RDBMS verwenden. MariaDB hat ein EXCEPT
Operator, aber es hat auch ein MINUS
eingeführt Operator als Synonym, das im Oracle-Modus verwendet werden kann.