Site icon ZoomingIn

Filtraggio dei Dati con MySQL

Utilizzo della clausola WHERE

In quest’articolo tratteremo l’utilizzo della clausola WHERE del comando SELECT per specificare le condizioni di una ricerca.
Solitamente le tabelle di un database contengano moltissimi dati ed è molto raro dover recuperare tutte le righe di una tabella.

L’esigenza più frequente solitamente è rappresentata dall’estrazione da una tabella di un sottogruppo di dati che serviranno poi ad organizzare operazioni o rapporti specifici.
Per richiedere solamente i dati necessari bisogna specificare alcuni criteri di ricerca , chiamati anche condizioni del filtro.

In un comando SELECT è possibile specificare i criteri di ricerca con la clausola WHERE, che deve essere inserita subito dopo il nome della tabella (la clausola FROM), come nell’esempio seguente.

SELECT prod_nome,prod_prezzo
FROM prodotti
WHERE prod_prezzo=6.1;

Con questo comando vengono recuperate due colonne dalla tabella prodotti, ma invece di richiedere tutte le righe, sono richieste solamente quelle con valore di 6.1 nella colonna prod_prezzo, come mostrato di seguito:

Output

prod_nome prod_prezzo
prosciutto cotto 6.1
prosciutto crudo 6.1

In questo esempio ho usato un semplice controllo di uguaglianza: si verifica se una colonna ha il valore specificato, e si filtrano i dati di conseguenza; ovviamente SQL consente di fare molto di più che un semplice controllo di uguaglianza.
Quando si utilizza la clausola WHERE insieme alla clausola ORDER BY, controllare che ORDER BY sia successiva a WHERE; in caso contrario si ha un errore.

Gli operatori della clausola WHERE

MySQL supporta molti operatori condizionali, alcuni dei quali sono:

OPERATORE DESCRIZIONE
= Uguaglianza
<> Disuguaglianza
!= Disuguaglianza
< Minore di
<= Minore o uguale a
> Maggiore di
>= Maggiore o uguale a
BETWEEN Compreso tra due valori specificati

Ricerca per singolo valore

Esempio:

SELECT prod_nome,prod_prezzo
FROM prodotti
WHERE prod_nome='carote';

Output

prod_nome prod_prezzo
carote 0.99

Con il controllo WHERE prod_nome=’carote’ si ottiene una singola riga con un valore di carote.
Per impostazioni predefinite di MySQL non riconosce le maiuscole o le minuscole quando esegue i confronti, per questo motivo carote e Carote risultano uguali.
Qui di seguito un altro esempio che elenca tutti i prodotti con un costo inferiore a 10:

SELECT prod_nome,prod_prezzo
FROM prodotti
WHERE prod_prezzo<10;

Il risultato dell’espressione che abbiamo scritto è:

Output

prod_nome prod_prezzo
olio
carote
pasta integrale
passata di pomodoro
prosciutto cotto
3.00
0.99
1.00
1.55
7.00

Ricerca entro un intervallo di valori

Per effettuare una ricerca entro un intervallo di valori, utilizzare l’operatore BETWEEN; la sua sintassi è leggermente diversa da quella degli altri operatori di WHERE che abbiamo visto in precedenza, infatti essa richiede due valori: l’inizio e la fine dell’intervallo.
L’operatore BETWEEN può essere utilizzato, per esempio per ricercare tutti i prodotti che hanno un costo compreso tra 1 e 3, o tutte le date comprese tra due date specificate.
Esempio:

SELECT prod_nome,prod_prezzo
FROM prodotti
WHERE prod_prezzo BETWEEN 1 AND 3;

Il risultato dell’espressione che abbiamo scritto è:

Output

prod_nome prod_prezzo
olio
pasta integrale
passata di pomodoro
3.00
1.00
1.55

Come si vede l’utilizzo quando si utilizza BETWEEN occorre specificare due valori: il limite superiore e quello inferiore dell’intervallo desiderato.
Inoltre i due valori devono essere separati dalla parola chiave AND; BETWEEN cerca corrispondenza con tutti i valori compresi nell’intervallo, compresi i due estremi.

Ricerca per assenza di valore

Quando viene creata una tabella, lo sviluppatore può specificare se le singole colonne possono non avere alcun valore.
Quando una colonna non contiene alcun valore, si dice che ha un valore NULL.
L’espressione SELECT ha una clausola speciale di WHERE che può essere utilizzata per recuperare le colonne con valori NULL; la clausola IS NULL.
La sintassi è la seguente:

SELECT prod_nome
FROM prodotti
WHERE prod_prezzo IS NULL;

L’espressione recupera un elenco di tutti i prodotti che non hanno un prezzo (che hanno il campo prod_prezzo vuoto, non ha un prezzo pari a 0) e poiché non esistono, non viene restituito alcun dato.

Quando applichiamo un filtro per selezionare tutte le righe che non hanno un particolare valore, ci si può aspettare che vengono recuperate quelle con valore NULL, ma non è cosi.
A causa del particolare significato di sconosciuto, il database non è in grado di capire se soddisfano la ricerca, quindi, in caso di ricerca per corrispondenze o per non corrispondenze, non vengono recuperate.

Quando vengono filtrati i dati, ricordare di verificare che le righe con valore NULL nella colonna selezionata per il filtro siano effettivamente presenti nei dati restituiti.

Exit mobile version