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.
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.