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
column
o un’espressione (expr
) con l’operatoreIN
nella 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_1
o 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
IN
con 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