In questo articolo vedremo come utilizzare delle istruzioni condizionali all’interno delle nostre query MySQL.
Il nostro scopo, in sostanza, sarà quello di "influenzare" una query a seconda che una data condizione sia vera oppure no. Faremo cioè ricorso ad un costrutto di tipo IF che dovrebbe essere noto a chiunque abbia delle seppur minime conoscenze di programmazione.
Il DBMS MYSQL supporta, a dire il vero, diverse funzioni per gestire le istruzioni condizionali che prendono il nome di Control Flow Functions (letteralmente: "funzioni per il controllo del flusso"). Queste funzioni sono:
- CASE
- IF()
- IFNULL()
- NULLIF()
Vediamole nel dettaglio.
CASE
Mediante il costrutto CASE … WHEN è possibile creare delle istruzioni condizionali piuttosto complesse prevedendo non solo un’unica condizione, ma una serie di condizioni alternative. Ad esempio:
SELECT CASE mese
WHEN 1 THEN 'Gennaio'
WHEN 2 THEN 'Febbraio'
WHEN 3 THEN 'Marzo'
WHEN 4 THEN 'Aprile'
WHEN 5 THEN 'Maggio'
WHEN 6 THEN 'Giugno'
WHEN 7 THEN 'Luglio'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Settembre'
WHEN 10 THEN 'Ottobre'
WHEN 11 THEN 'Novembre'
WHEN 12 THEN 'Dicembre'
END
FROM calendario ORDER BY mese ASC;
Oppure:
SELECT CASE nazione
WHEN 'IT' THEN 'Italia' ELSE 'Estero' END
FROM utenti;
La funzione IF()
La funzione IF è più semplice di CASE e consente di verificare un’unica condizione. La funzione prevede tre argomenti: il primo è l’espressione da verificare, il secondo è il risultato restituito in caso in cui l’espressione sia vera, il terzo il risultato da restituire nel caso l’espressione sia falsa.
IF (Espressione,Vero,Falso)
Vediamo un esempio:
SELECT nome, cognome, IF (nazione = 'IT','Italia','Estero') AS paese FROM utenti;
La funzione IFNULL()
La funzione IFNULL intercetta eventuali errori del MySQL (che restituisce NULL) e li gestisce in modo prederminato. La funzione ISNULL accetta due parametri: il primo è il dato da verificare, il secondo è il risultato da restituire qualora il primo argomento sia NULL.
Facciamo un esempio:
SELECT IFNULL(10/0,'Non posso dividere per zero!');
-> Non posso dividere per zero!
La funzione NULLIF()
Questa funzione accetta due argomenti che vengono confrontati tra loro; se sono uguali restituisce NULL in caso contrario restituisce il primo argomento.
Vediamo un esempio:
SELECT NULLIF(1,1);
-> NULL
SELECT NULLIF(1,2);
-> 1