Oracle NOT EXISTS

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *