MySQL IN
Summario: in questo tutorial, imparerete come usare l’operatore MySQL IN per determinare se un valore specificato corrisponde a qualsiasi valore in una lista o una sottoquery.
Introduzione all’operatore MySQL IN
L’operatore IN permette di determinare se un valore specificato corrisponde a qualsiasi valore in un insieme di valori o restituito da una subquery.
Di seguito viene illustrata la sintassi dell’operatore IN:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Esaminiamo la query in maggior dettaglio:
- Usa un
columno un’espressione (expr) con l’operatoreINnella clausolaWHERE. - Separate i valori della lista con delle virgole (,).
L’operatore IN restituisce 1 se il valore della clausola column_1 o il risultato dell’espressione expr è uguale a qualsiasi valore della lista, altrimenti, restituisce 0.
Quando i valori nella lista sono tutti costanti, MySQL esegue i seguenti passi:
- Prima, valuta i valori in base al tipo dell’espressione
column_1o del risultato dell’espressioneexpr. - In secondo luogo, ordina i valori.
- In terzo luogo, cerca il valore utilizzando l’algoritmo di ricerca binaria. Pertanto, una query che utilizza l’operatore
INcon una lista di costanti è molto veloce.
Nota che se il expr o qualsiasi valore nella lista è NULL, l’operatore IN ritorna NULL.
È possibile combinare l’operatore IN con l’operatore NOT per determinare se un valore non corrisponde a nessun valore in una lista o in una subquery. E si può anche usare l’operatore IN nella clausola WHERE di altre dichiarazioni come UPDATE, e DELETE.
Esempi di operatore IN MySQL
Facciamo pratica con alcuni esempi di utilizzo dell’operatore IN. Vedere la seguente tabella offices dal database di esempio:

Se volete trovare gli uffici che si trovano negli Stati Uniti e in Francia, potete usare l’operatore IN come la seguente query:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Try It Out

È possibile ottenere lo stesso risultato con l’operatore OR come la seguente query:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Prova
Nel caso in cui la lista abbia molti valori, è necessario costruire una dichiarazione molto lunga con più operatori OR. Quindi, l’operatore IN permette di accorciare la query e renderla più leggibile.
Per ottenere gli uffici che non si trovano in USA e Francia, si usa NOT IN nella clausola WHERE come segue:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Prova

Utilizzare MySQL IN con una subquery
L’operatore IN è spesso usato con una subquery. Invece di fornire una lista di valori letterali, la subquery ottiene una lista di valori da una o più tabelle e li usa come valori di input dell’operatore IN.
Diamo un’occhiata alle tabelle orders e orderDetails del database di esempio:

Per esempio, se volete trovare gli ordini i cui valori totali sono maggiori di 60,000, usate l’operatore IN come mostrato nella seguente query:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Prova

L’intera query sopra può essere suddivisa in due query separate.
Prima, la subquery restituisce una lista di numeri d’ordine i cui valori sono maggiori di 60,000 utilizzando le clausole GROUP BY e HAVING:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Prova

Secondo, la query esterna utilizza l’operatore IN nella clausola WHERE per ottenere dati dalla tabella orders:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Try It Out
In questo tutorial, avete imparato ad usare l’operatore MySQL IN per determinare se un valore corrisponde a qualsiasi valore in una lista di valori.
- Questo tutorial è stato utile?
- SìNo