Articles

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:

SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Code language: SQL (Structured Query Language) (sql)

Esaminiamo la query in maggior dettaglio:

  • Usa un column o un’espressione ( expr ) con l’operatore IN nella clausola WHERE.
  • 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’espressione expr.
  • 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:

Tabella Uffici

Se volete trovare gli uffici che si trovano negli Stati Uniti e in Francia, potete usare l’operatore IN come la seguente query:

SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Try It Out

MySQL IN country list example
È possibile ottenere lo stesso risultato con l’operatore OR come la seguente query:

SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Code language: SQL (Structured Query Language) (sql)

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:

SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Prova

MySQL NOT IN offices esempio

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:

tabella orderdetails

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:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Code language: SQL (Structured Query Language) (sql)

Prova

MySQL IN con esempio di subquery

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:

SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Code language: SQL (Structured Query Language) (sql)

Prova

MySQL IN subquery

Secondo, la query esterna utilizza l’operatore IN nella clausola WHERE per ottenere dati dalla tabella orders:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Code language: SQL (Structured Query Language) (sql)

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *