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