Database
 sql >> Database >  >> RDS >> Database

SQL IN vs SQL ESISTE

SQL IN vs SQL ESISTE

Questo articolo illustra in dettaglio gli operatori IN e EXISTS in SQL . È una domanda comune tra gli sviluppatori quale sia la differenza tra questi due operatori. Per conoscere la differenza, discutiamo prima di ciascuno di questi operatori in dettaglio.

Operatore IN

L'operatore IN viene utilizzato per ottenere risultati quando un valore specificato corrisponde a un valore in un insieme di valori o viene restituito da una query interna. Questo operatore può essere utilizzato anche con WHERE clausola per specificare più di un valore. L'operatore IN viene spesso indicato come l'acronimo dell'operatore OR perché riduce l'uso di più condizioni OR nelle query SELECT, INSERT, UPDATE o DELETE .

In questo operatore, la sottoquery viene risolta per prima e il risultato viene quindi utilizzato per risolvere la query esterna.

Quella che segue è la sintassi generale dell'operatore IN:

SELECT column_name
 FROM table_name
 WHERE column_name IN (value1, value2, …); 

Esempio:

Consideriamo la seguente tabella Clienti.

ID_cliente Nome_cliente Città Occupazione
1 Harry Calcutta Affari
2 Ron Mumbai Dottore
3 Albus Delhi Ingegnere
4 Dobby Pune Scienziato
5 Piton Bangalore Studente

Query:

SELECT *
 FROM Customer    
 WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

La query precedente restituirà tutti i clienti che sono Dottore o Scienziato o Ingegnere.

Risultato:

ID_cliente Nome_cliente Città Occupazione
2 Ron Mumbai Dottore
3 Albus Delhi Ingegnere
4 Dobby Pune Scienziato

Operatore EXISTS

L'operatore EXISTS, a differenza dell'operatore IN, restituisce un valore booleano. Questo operatore controlla il risultato della query interna e restituisce un valore booleano, ovvero true o false. Se la query interna restituisce uno o più record, l'operatore restituisce true altrimenti restituisce false quando non vengono trovati record.

Questo operatore è anche efficiente poiché interrompe l'ulteriore elaborazione non appena viene rilevato il primo vero evento.

Quella che segue è la sintassi dell'operatore EXISTS:

SELECT column_names    
 FROM table_name    
 WHERE NOT EXISTS (    
 SELECT column_names     
 FROM table_name     
 WHERE condition    
 ); 

Esempio:

Consideriamo la seguente tabella Clienti.

ID_cliente Nome Occupazione Età
101 Harry Ingegnere 32
102 Ron Sviluppatore 30
103 Dobby Leader 28
104 Albus Scienziato 45
105 Piton Falegname 26
106 Zenzero Attore 25
107 NULLO NULLO NULLO

Consideriamo un'altra tabella Ordini.

ID_ordine ID_cliente Nome_prodotto Data_ordine
1 101 Computer portatile 10-01-2021
2 103 Desktop 12-02-2021
3 106 iPhone 15-02-2021
4 104 Cellulare 05-03-2021
5 102 TV 20-03-2021

Query:

SELECT Name, Occupation
 FROM Customer    
 WHERE EXISTS (
 SELECT *
 FROM Orders     
 WHERE Customer.Cust_id = Orders.Cust_id
 ); 

La query di cui sopra restituirà il nome e l'occupazione di tutti i clienti che hanno effettuato almeno un ordine.

Risultato:

Nome Occupazione
Harry Ingegnere
Ron Sviluppatore
Dobby Leader
Albus Scienziato
Zenzero Attore

Tabella delle differenze tra operatore IN ed EXISTS

Le differenze principali tra l'operatore IN e l'operatore EXISTS sono elencate di seguito in modo tabulare:

Operatore IN Operatore EXISTS
Riduce al minimo l'utilizzo delle condizioni OR. Verifica l'esistenza di un record nella query interna.
Confronta i valori della query interna con il valore della query esterna. Non confronta i valori tra la query interna e la query secondaria.
Verifica tutti i valori all'interno del blocco della clausola IN. Arresta ogni ulteriore esecuzione non appena viene soddisfatta la prima condizione vera.
Può restituire TRUE, FALSE o NULL. Restituisce TRUE o FALSE.
Può essere usato per controllare i valori NULL. Non può essere utilizzato per controllare i valori NULL.
Viene usato sia con sottoquery che con valori. Viene utilizzato solo con le sottoquery.
L'esecuzione è più veloce quando il risultato della query interna è inferiore. L'esecuzione è più veloce anche quando il risultato della query interna è di grandi dimensioni. È più efficiente dell'operatore IN.
Sintassi :SELECT nome_colonna DA nome_tabella WHERE nome_colonna IN (sottoquery); Sintassi :SELECT nome_colonna DA nome_tabellaWHERE [NON] ESISTE (sottoquery);

Conclusione:

In questo argomento è stato effettuato un confronto tra l'operatore IN e gli operatori EXISTS di SQL. Entrambi gli operatori eseguono la stessa operazione ma il loro funzionamento interno è diverso. Hanno un funzionamento logico diverso. Ognuno di loro può essere selezionato secondo il requisito. Tuttavia, se l'insieme di dati è grande, si consiglia sempre di utilizzare l'operatore EXISTS.