L'operatore IN ( Sql )
Nel linguaggio SQL l'operatore IN si usa per verificare l'appartenenza di un valore a un insieme. La sua negazione è l'operatore NOT IN.
A cosa serve?
Si tratta di un operatore logico relazione. L'operatore IN mi permette di specificare una lista di valori come clausole di ricerca in un'unica query.
La sintassi
La sintassi dell'operatore è la seguente:
SELECT [campi]
FROM [tabella]
WHERE [campo] IN ( [clausole di ricerca] ) ;
L'operatore IN è generalmente usato nella sezione Where.
Un esempio pratico
Se volessi interrogare un database per cercare tutte le persone che si chiamano Mario o Maria potrei scrivere nel sequente modo:
SELECT *
FROM alunni
WHERE nome IN ('Mario', 'Maria') ;
La precedente query equivale a scrivere due clausole di ricerca separate tra loro dall'operatore OR.
SELECT *
FROM alunni
WHERE ( ( nome = 'Mario' ) OR ( nome = 'Maria') ) ;
Perché l'operatore IN è utile?
Fin quando si tratta di due o tre clausole di ricerca fa poca differenza scrivere in un modo oppure nell'altro.
Quando le clausole di ricerca sono molte l'operatore IN è molto più pratico.
Evita di ripetere ogni volta il nome del campo, l'operatore uguale e l'operatore logico OR.
Un altro esempio con valori numerici
Se volessi cercare in una tabella soltanto le persone con 30 o 35 anni d'età potrei scrivere nel seguente modo:
SELECT *
FROM alunni
WHERE anni IN (30, 35) ;
La query estrapola soltanto i record in cui è documentato nel campo 'anni' il numero 30 o 35.
Sono invece esclusi i valori intermedi, le persone con 31, 32, 33 e 34 anni, e tutti gli altri con età superiore o inferiore.
L'operatore IN e NOT IN nelle select nidificate
L'uso degli operatori IN e NOT IN è particolarmente utile nelle query nidificate.
Esempio
Ho due tabelle Persone e Italia
Per trovare i nomi delle persone che risiedono in Lombardia scrivo.
SELECT Nome, Cognome, Residenza FROM PERSONE
WHERE Residenza IN ( SELECT Città FROM Italia WHERE Regione = 'Lombardia' )
Il DBMS esegue la query interna trovando le città "Bergamo" e "Milano".
Poi esegue la select esterna e individua le righe della tabella Persone in cui la Residenza appartiene al risultato della select interna.
Il risultato della query è
Nota. E' possibile ottenere lo stesso risultato con una condizione JOIN.
Esempio 2
Per cercare le persone che non risiedono in Lombardia scrivo
SELECT Nome, Cognome, Residenza FROM PERSONE
WHERE Residenza NOT IN ( SELECT Città FROM Italia WHERE Regione = 'Lombardia' )
Il DBMS esegue la select interna trovando le città "Bergamo" e "Milano".
Poi esegue la select esterna e individua le righe in cui la Residenza non appartiene al risultato della select interna.
Il risultato della query è
E così via.