Oracle NOT EXISTS (Deutsch)

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.