EXISTS

L'operatore Exists specifica una sottoquery per testare l'esistenza di righe e restituisce un valore booleano.
Vale true se la subquery ( select, insert, update o delete) include uno o più righe.

S i n t a s s i
SELECT columns
FROM tables
WHERE EXISTS ( subquery );

R e g o l e:

  1. l'outer query non valuta tutti i risultati dalla inner query (come nel caso dell'operatore IN) ma si ferma quando trova il primo valore della inner query;
  2.   l'operatore Exists è usato per verificare se i valori restituiti dalla outer query esistono nei risultati nella inner query.


Nell'esempio seguente vengono confrontate due query equivalenti da un punto di vista semantico. Nella prima query viene utilizzata la parola chiave EXISTS, mentre nella seconda query viene utilizzata la parola chiave IN.

SELECT a.FirstName, a.SecretName
FROM Heroes as A
WHERE EXISTS
(SELECT *  FROM Marvel_Heroes as B  WHERE A.SecretEntityID = B.SecretEntityID and A.SecretName= 'Thor');

SELECT a.FirstName, a.SecretName
FROM Heroes as A
WHERE A.SecretName IN
(SELECT A.SecretName FROM Marvel_Heroes as B WHERE A.SecretEntityID = B.SecretEntityID  and A.SecretName = 'Thor');

E s e m p i o
L'operatore NOT EXISTS restituirà tutti i record dalla tabella HEROES che non sono presenti in tabella VILLAINS per identity_id.
SELECT *
FROM HEROES
WHERE not exists (select * from VILLAINS Where HEROES.identity_id = VILLAINS.identity_id);

E s e m  p i o
Istruzione DELETE che utilizza la condizione EXISTS:
DELETE FROM HEROES
WHERE EXISTS
(select * from VILLAINS Where HEROES.identity_id = VILLAINS.identity_id);

E s e m p i o
Istruzione UPDATE che utilizza la condizione EXISTS:
UPDATE suppliers
SET supplier_name = ( SELECT customers.name
        FROM customers
       WHERE customers.customer_id = suppliers.supplier_id)
WHERE EXISTS
( SELECT customers.name
  FROM customers
  WHERE customers.customer_id = suppliers.supplier_id);

E s e m p i o
Istruzione INSERT che utilizza la condizione EXISTS:
INSERT INTO suppliers (supplier_id, supplier_name)
SELECT account_no, name
FROM suppliers
WHERE exists (select * from orders where suppliers.supplier_id = orders.supplier_id);


Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione