back to top

Funzioni condizionali in MySQL: CASE, IF, IFNULL e NULLIF

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
Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

In questa guida...