Oracle NOT EXISTS (Polski)

Podsumowanie: W tym poradniku dowiesz się jak używać operatora Oracle NOT EXISTS do odejmowania jednego zestawu danych od drugiego.

Wprowadzenie do operatora Oracle NOT EXISTS

Operator NOT EXISTS działa odwrotnie do operatora EXISTS. Często używamy operatora NOT EXISTS z podzapytaniem, aby odjąć jeden zestaw danych od drugiego.

Rozważmy następujące wyrażenie, które używa operatora NOT EXISTS:

SELECT *FROM table_nameWHERE NOT EXISTS (subquery);

Operator NOT EXISTS zwraca wartość true, jeśli podzapytanie nie zwraca żadnego wiersza. W przeciwnym razie zwraca false.

Zauważ, że operator NOT EXISTS zwraca false, jeśli podzapytanie zwraca jakiekolwiek wiersze z wartością NULL.

Oracle NOT EXISTS przykłady

Zobacz następujące tabele customers i orders w przykładowej bazie danych:

Następujące zestawienie znajduje wszystkich klientów, którzy nie mają zamówienia:

SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;


Aby zarchiwizować klientów, którzy nie mają zamówienia, używasz następującego stwierdzenia:

CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );

Aby zaktualizować limit kredytowy klientów, którzy nie mają zamówień w 2017 roku, korzystasz z następującego zestawienia UPDATE:

UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );

Aby usunąć wszystkich klientów, którzy nie mieli zamówienia w 2016 i 2017 roku z tabeli customers, używasz następującego DELETE statement:

Oracle NOT EXISTS vs. NOT IN

Poniższa instrukcja używa operatora IN z podzapytaniem:

SELECT*FROMtable_nameWHEREid IN(subquery);

Załóżmy, że zapytanie subquery zwraca cztery wartości 1, 2, 3 i NULL. Możesz przepisać całe powyższe zapytanie w następujący sposób:

SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;

Następujące wyrażenie zawsze zwraca wartość NULL, ponieważ wartość NULL nie może być porównywana do niczego.

id = NULL

Dlatego poniższe wyrażenie zwraca wartość NULL, jeśli jakikolwiek wiersz w zestawie wyników podzapytania jest NULL.

id NOT IN (subquery)

W przeciwieństwie do tego, NULL nie ma wpływu na wynik operatora NOT EXIST, ponieważ operator NOT EXISTS sprawdza wyłącznie istnienie wierszy w podzapytaniu:

SELECT *FROM table_nameWHERE NOT EXISTS(subquery);

Podsumowując, operatory NOT EXISTS i NOT IN zachowują się inaczej, gdy w grę wchodzą wartości null.

W tym poradniku dowiedziałeś się, jak używać operatora Oracle NOT EXISTS do odejmowania jednego zestawu danych od drugiego.

  • Czy ten poradnik był pomocny?
  • TakNie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *