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