Samenvatting: in deze tutorial leer je hoe je de Oracle NOT EXISTS
operator kunt gebruiken om een set gegevens van een andere set gegevens af te trekken.
Inleiding tot de Oracle NOT EXISTS operator
De NOT EXISTS
operator werkt het tegenovergestelde van de EXISTS
operator. We gebruiken de NOT EXISTS
operator vaak met een subquery om een set gegevens van een andere set af te trekken.
Overweeg het volgende statement dat de NOT EXISTS
operator gebruikt:
SELECT *FROM table_nameWHERE NOT EXISTS (subquery);
De NOT EXISTS
operator retourneert true als de subquery geen rij retourneert.
Merk op dat de NOT EXISTS
operator false teruggeeft als de subquery rijen met een NULL waarde teruggeeft.
Oracle NOT EXISTS voorbeelden
Zie de volgende customers
en orders
tabellen in de voorbeelddatabase:
Het volgende statement vindt alle klanten die geen bestelling hebben:
SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;
Om de klanten te archiveren die geen bestelling hebben, gebruikt u het volgende statement:
CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );
Om de kredietlimiet bij te werken van klanten die in 2017 geen bestelling hebben, gebruikt u het volgende UPDATE
statement:
UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );
En om alle klanten die in 2016 en 2017 geen bestelling hebben gehad uit de customers
tabel te verwijderen, gebruikt u het volgende DELETE
statement:
Oracle NOT EXISTS vs. NOT IN
Het volgende statement gebruikt de IN
operator met een subquery:
SELECT*FROMtable_nameWHEREid IN(subquery);
Voorstel dat de subquery
vier waarden 1, 2, 3, en NULL retourneert. Je kunt de hele query hierboven als volgt herschrijven:
SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;
De volgende expressie retourneert altijd een NULL-waarde, omdat een NULL-waarde nergens mee kan worden vergeleken.
id = NULL
Daarom retourneert de volgende expressie een NULL-waarde als een rij in de resultaatverzameling van de subquery NULL is.
id NOT IN (subquery)
NULL heeft daarentegen geen invloed op het resultaat van de NOT EXIST
operator, omdat de NOT EXISTS
operator alleen het bestaan van rijen in de subquery controleert:
SELECT *FROM table_nameWHERE NOT EXISTS(subquery);
In conclusie, de NOT EXISTS
en NOT IN
gedragen zich verschillend als er null waarden bij betrokken zijn.
In deze zelfstudie heb je geleerd hoe je de Oracle NOT EXISTS
operator kunt gebruiken om een set gegevens van een andere set af te trekken.
- Was deze zelfstudie nuttig?
- JaNee