Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie den Oracle NOT EXISTS
Operator verwenden, um einen Datensatz von einem anderen zu subtrahieren.
Einführung in den Oracle NOT EXISTS-Operator
Der NOT EXISTS
-Operator funktioniert genau umgekehrt wie der EXISTS
-Operator. Wir verwenden den NOT EXISTS
-Operator oft mit einer Subquery, um einen Datensatz von einem anderen zu subtrahieren.
Betrachten Sie die folgende Anweisung, die den NOT EXISTS
-Operator verwendet:
SELECT *FROM table_nameWHERE NOT EXISTS (subquery);
Der NOT EXISTS
-Operator gibt true zurück, wenn die Subquery keine Zeile liefert. Andernfalls gibt er false zurück.
Beachten Sie, dass der NOT EXISTS
-Operator false zurückgibt, wenn die Subquery eine Zeile mit einem NULL-Wert zurückgibt.
Oracle NOT EXISTS Beispiele
Sehen Sie sich die folgenden customers
und orders
Tabellen in der Beispieldatenbank an:
Das folgende Statement findet alle Kunden, die keine Bestellung haben:
SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;
Um die Kunden zu archivieren, die keine Bestellung haben, verwenden Sie die folgende Anweisung:
CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );
Um das Kreditlimit der Kunden zu aktualisieren, die im Jahr 2017 keine Bestellung haben, verwenden Sie die folgende UPDATE
-Anweisung:
UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );
Und um alle Kunden, die 2016 und 2017 keine Bestellung hatten, aus der customers
-Tabelle zu löschen, verwenden Sie die folgende DELETE
-Anweisung:
Oracle NOT EXISTS vs. NOT IN
Die folgende Anweisung verwendet den IN
-Operator mit einer Unterabfrage:
SELECT*FROMtable_nameWHEREid IN(subquery);
Angenommen, die subquery
liefert vier Werte 1, 2, 3 und NULL. Sie können die gesamte obige Abfrage wie folgt umschreiben:
SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;
Der folgende Ausdruck gibt immer einen NULL-Wert zurück, weil ein NULL-Wert mit nichts verglichen werden kann.
id = NULL
Daher gibt der folgende Ausdruck einen NULL-Wert zurück, wenn irgendeine Zeile in der Ergebnismenge der Unterabfrage NULL ist.
id NOT IN (subquery)
Im Gegensatz dazu wirkt sich NULL nicht auf das Ergebnis des NOT EXIST
-Operators aus, da der NOT EXISTS
-Operator lediglich die Existenz von Zeilen in der Unterabfrage überprüft:
SELECT *FROM table_nameWHERE NOT EXISTS(subquery);
Zusammenfassend lässt sich sagen, dass sich NOT EXISTS
und NOT IN
unterschiedlich verhalten, wenn Nullwerte beteiligt sind.
In diesem Tutorial haben Sie gelernt, wie Sie den Oracle NOT EXISTS
-Operator verwenden, um einen Datensatz von einem anderen zu subtrahieren.
- War dieses Tutorial hilfreich?
- JaNein