Oracle NOT EXISTS (Italiano)

Sommario: in questo tutorial, si impara ad usare l’operatore Oracle NOT EXISTS per sottrarre un insieme di dati da un altro.

Introduzione all’operatore Oracle NOT EXISTS

L’operatore NOT EXISTS funziona al contrario dell’operatore EXISTS. Usiamo spesso l’operatore NOT EXISTS con una subquery per sottrarre un insieme di dati da un altro.

Considerate la seguente dichiarazione che usa l’operatore NOT EXISTS:

SELECT *FROM table_nameWHERE NOT EXISTS (subquery);

L’operatore NOT EXISTS restituisce true se la subquery non restituisce alcuna riga. Altrimenti, restituisce false.

Nota che l’operatore NOT EXISTS restituisce false se la subquery restituisce delle righe con un valore NULL.

Esempi di NOT EXISTS di Oracle

Vedi le seguenti customers e orders tabelle nel database di esempio:

La seguente dichiarazione trova tutti i clienti che non hanno ordini:

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


Per archiviare i clienti che non hanno un ordine, si usa la seguente dichiarazione:

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

Per aggiornare il limite di credito dei clienti che non hanno ordini nel 2017, si usa la seguente dichiarazione 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 );

E per eliminare dalla tabella customers tutti i clienti che non hanno avuto ordini nel 2016 e nel 2017, si usa la seguente DELETE dichiarazione:

Oracle NOT EXISTS vs. NOT IN

La seguente dichiarazione usa l’operatore IN con una subquery:

SELECT*FROMtable_nameWHEREid IN(subquery);

Supponiamo che l’operatore subquery restituisca quattro valori 1, 2, 3, e NULL. Potete riscrivere l’intera query come segue:

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

L’espressione seguente restituisce sempre un valore NULL perché un valore NULL non può essere confrontato con nulla.

id = NULL

Quindi, l’espressione seguente restituisce un valore NULL se qualsiasi riga nel risultato della sottoquery è NULL.

id NOT IN (subquery)

Al contrario, il NULL non influenza il risultato dell’operatore NOT EXIST perché l’operatore NOT EXISTS controlla unicamente l’esistenza di righe nella sottoquery:

SELECT *FROM table_nameWHERE NOT EXISTS(subquery);

In conclusione, gli operatori NOT EXISTS e NOT IN si comportano diversamente quando sono coinvolti dei valori nulli.

In questo tutorial, avete imparato ad usare l’operatore Oracle NOT EXISTS per sottrarre un insieme di dati da un altro.

  • Questo tutorial è stato utile?
  • SìNo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *