L'istruzione MySQL IF ELSE con esempi pratici

Ultimo aggiornamento: 6 Novembre 2025.
  • IF ELSE è una funzione condizionale in MySQL per restituire valori in base a condizioni, utile in SELECT e nelle espressioni.
  • Può essere combinato con operatori, aggregazioni, sottoquery, clausole CASE, IFNULL, REGEXP, DATE_FORMAT e GROUP BY/HAVING per una logica avanzata.
  • Consente di classificare i dati, gestire i valori nulli e generare messaggi dinamici per record, ma un'eccessiva annidamento può influire sulla leggibilità e sulle prestazioni.
se altrimenti mysql con esempi

In questo articolo ti mostrerò come utilizzare l'istruzione IF ELSE di MySQL con esempi per migliorare le tue query e ottenere risultati più precisi. Grazie a questi 18 esempi pratici impareremo come utilizzare questo potente strumento e sfruttare al meglio il database. Esploreremo casi reali in cui l'utilizzo di IF ELSE fa la differenza, dalla selezione condizionale dei dati all'esecuzione di operazioni complesse. Siete pronti? Bene, andiamo lì! Preparati a padroneggiare questa tecnica e a portare le tue competenze SQL a un livello superiore.

Cos'è l'istruzione IF ELSE in MySQL?

Prima di addentrarci negli esempi, è importante capire cosa sia l'istruzione IF ELSE in MySQL. In pratica si tratta di una struttura condizionale che consente di eseguire azioni diverse a seconda che una determinata condizione sia soddisfatta o meno. Ciò significa che se la condizione è vera, verrà eseguito un blocco di codice, mentre se è falsa, verrà eseguito un blocco di codice diverso.

Istruzione MySQL IF ELSE con esempi

Ecco una tabella che elenca i 18 esempi che vedremo in questo articolo:

Ejemplo Descrizione
1 Uso di base di IF ELSE
2 SE ALTRO con più condizioni
3 IF ELSE annidato
4 IF ELSE con operatori logici
5 IF ELSE con funzioni di aggregazione
6 IF ELSE con sottoquery
7 IF ELSE con variabili
8 SE ALTRO con CASO
9 SE ALTRO con IFNULL
10 SE ALTRO con NULLIF
11 SE ALTRO con ESISTE
12 SE ALTRO con IN
13 SE ALTRO con TRA
14 SE ALTRO con MI PIACE
15 SE ALTRO con REGEXP
16 SE ALTRO con DATE_FORMAT
17 SE ALTRO con GROUP_CONCAT
18 SE ALTRO con AVERE

1. Uso di base di IF ELSE

Cominciamo con un semplice esempio. Supponiamo di avere una tabella chiamata "prodotti" con i seguenti campi: id, nome, prezzo e stock. Vogliamo conoscere il nome del prodotto e un messaggio che indichi se è disponibile o meno. Possiamo farlo in questo modo:

SELECT nombre, IF(stock > 0, 'Hay stock', 'No hay stock') AS stock 
FROM productos;

In questo caso la condizione è stock > 0. Se il requisito è soddisfatto, verrà visualizzato il messaggio "Disponibile", altrimenti verrà visualizzato il messaggio "Esaurito".

2. IF ELSE con condizioni multiple

Possiamo usare IF ELSE anche con più condizioni. Ad esempio, supponiamo di voler ottenere il nome del prodotto e un messaggio che indichi se il prezzo è maggiore di 100, minore di 50 o compreso tra 50 e 100. Possiamo farlo in questo modo:

SELECT nombre, 
  IF(precio > 100, 'Caro', 
    IF(precio < 50, 'Barato', 'Precio medio')
  ) AS precio
FROM productos;

In questo caso utilizziamo istruzioni IF ELSE nidificate per valutare le diverse condizioni.

3. IF ELSE annidato

Come abbiamo visto nell'esempio precedente, possiamo annidare più istruzioni IF ELSE per valutare condizioni diverse. Diamo un'occhiata a un altro esempio. Supponiamo di voler ottenere il nome del prodotto e un messaggio che indichi se lo stock è maggiore di 100, minore di 10 o compreso tra 10 e 100. Inoltre, se lo stock è minore di 10, vogliamo indicare se è 0 o meno. Possiamo farlo in questo modo:

SELECT nombre,
  IF(stock > 100, 'Stock alto',
    IF(stock < 10, 
      IF(stock = 0, 'Sin stock', 'Stock bajo'),
      'Stock medio'
    )
  ) AS stock
FROM productos;

In questo caso utilizziamo tre livelli di nidificazione per valutare tutte le condizioni necessarie.

4. IF ELSE con operatori logici

Possiamo anche combinare IF ELSE con operatori logici come AND e OR. Ad esempio, supponiamo di voler ottenere il nome del prodotto e un messaggio che indichi se il prezzo è maggiore di 100 e lo stock è minore di 10. Possiamo farlo in questo modo:

SELECT nombre,
  IF(precio > 100 AND stock < 10, 'Urgente reponer', 'OK') AS estado
FROM productos;

In questo caso la condizione è precio > 100 AND stock < 10. Se entrambe le condizioni sono soddisfatte, verrà visualizzato il messaggio "Rifornimento urgente", altrimenti verrà visualizzato "OK".

5. IF ELSE con funzioni di aggregazione

Possiamo combinare IF ELSE con funzioni di aggregazione come SUM, AVG, MAX, ecc. Ad esempio, supponiamo di voler ottenere il totale delle vendite e un messaggio che indichi se abbiamo superato o meno l'obiettivo di 10000. Possiamo farlo in questo modo:

SELECT 
  SUM(total) AS total_ventas,
  IF(SUM(total) > 10000, '¡Objetivo superado!', 'No se alcanzó el objetivo') AS mensaje
FROM ventas;

In questo caso, calcoliamo le vendite totali con SUM e poi utilizziamo IF ELSE per visualizzare un messaggio a seconda che l'obiettivo sia stato superato o meno.

  Cosa sono i database non relazionali?

6. IF ELSE con sottoquery

Possiamo utilizzare IF ELSE anche con le subquery . Ad esempio, supponiamo di voler ottenere i nomi dei prodotti e un messaggio che indichi se il loro prezzo è superiore al prezzo medio di tutti i prodotti. Possiamo farlo in questo modo:

SELECT nombre,
  IF(precio > (SELECT AVG(precio) FROM productos), 
    'Precio superior a la media', 
    'Precio inferior o igual a la media'
  ) AS comparacion
FROM productos;

In questo caso utilizziamo una sottoquery per calcolare il prezzo medio di tutti i prodotti e poi confrontiamo ogni singolo prezzo con tale valore utilizzando IF ELSE.

7. IF ELSE con variabili

Possiamo usare IF ELSE insieme alle variabili per memorizzare e utilizzare valori nelle nostre query. Supponiamo, ad esempio, di voler ottenere il totale delle vendite e un messaggio che indichi se abbiamo superato un obiettivo memorizzato in una variabile. Possiamo farlo in questo modo:

SET @objetivo = 10000;

SELECT 
  SUM(total) AS total_ventas,
  IF(SUM(total) > @objetivo, '¡Objetivo superado!', 'No se alcanzó el objetivo') AS mensaje 
FROM ventas;

In questo caso, definiamo prima una variabile @objetivo con il valore 10000 e poi lo utilizziamo nella condizione IF ELSE.

8. SE ALTRO con CASO

Un altro modo per utilizzare IF ELSE è combinarlo con un'istruzione CASE . Ad esempio, supponiamo di voler ottenere il nome del prodotto e una classificazione di prezzo come "Economico", "Medio" o "Caro" in base a determinati intervalli. Possiamo farlo in questo modo:

SELECT nombre,
  CASE 
    WHEN precio < 50 THEN 'Barato'
    WHEN precio BETWEEN 50 AND 100 THEN 'Medio'
    ELSE 'Caro'
  END AS clasificacion
FROM productos;

In questo caso utilizziamo CASE per valutare diverse condizioni e assegnare un valore in base al risultato. Si tratta di un metodo alternativo per ottenere lo stesso risultato delle istruzioni IF ELSE annidate.

9. SE ALTRO con IFNULL

La funzione IFNULL ci consente di gestire i valori nulli nelle nostre query. Possiamo combinarlo con IF ELSE per assegnare un valore predefinito quando incontriamo un valore nullo. Supponiamo, ad esempio, di voler ottenere il nome del prodotto e il suo prezzo, ma se il prezzo è nullo, vogliamo visualizzare il messaggio "Query". Possiamo farlo in questo modo:

SELECT nombre, IFNULL(precio, 'Consultar') AS precio
FROM productos;

In questo caso, utilizziamo IFNULL per valutare se il prezzo è nullo e, in tal caso, visualizzare il messaggio "Query" al posto del valore nullo.

10. SE ALTRO con NULLIF

La funzione NULLIF è simile a IFNULL, ma invece di gestire i valori nulli, consente di confrontare due valori e restituire NULL se sono uguali. Possiamo combinarlo con IF ELSE per assegnare un valore alternativo quando viene soddisfatta una determinata condizione. Supponiamo, ad esempio, di voler conoscere il nome del prodotto e il suo prezzo, ma se il prezzo è 0, vogliamo visualizzare il messaggio "Gratuito". Possiamo farlo in questo modo:

SELECT nombre, IF(NULLIF(precio, 0) IS NULL, 'Gratis', precio) AS precio
FROM productos;

In questo caso, utilizziamo NULLIF per confrontare il prezzo con 0 e restituiamo NULL se sono uguali. Utilizziamo quindi IF ELSE per valutare se il risultato di NULLIF è NULL e, in tal caso, visualizzare il messaggio "Gratis" al posto del prezzo.

11. SE ALTRO con ESISTE

La clausola EXISTS consente di verificare se esiste un record che soddisfa una determinata condizione in una sottoquery. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome dei clienti e un messaggio che indichi se hanno effettuato un ordine o meno. Possiamo farlo in questo modo:

SELECT nombre,
  IF(EXISTS(SELECT * FROM pedidos WHERE cliente_id = clientes.id),
    'Con pedidos',
    'Sin pedidos'
  ) AS estado
FROM clientes;

In questo caso utilizziamo EXISTS con una sottoquery per verificare se esistono ordini per ciascun cliente. Utilizziamo quindi IF ELSE per visualizzare un messaggio in base al risultato.

12. SE ALTRO con IN

L'operatore IN consente di verificare se un valore è presente in un elenco di valori. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome dei prodotti e un messaggio che indichi se appartengono alla categoria "Elettronica" o "Casa". Possiamo farlo in questo modo:

SELECT nombre,
  IF(categoria IN ('Electrónica', 'Hogar'),
    'Producto destacado',
    'Producto regular'
  ) AS tipo
FROM productos;

In questo caso, utilizziamo IN per verificare se la categoria del prodotto è elencata in "Elettronica" o "Casa". Utilizziamo quindi IF ELSE per visualizzare un messaggio in base al risultato.

  Forme normali nei database: cosa sono e a cosa servono?

13. SE ALTRO con TRA

L'operatore BETWEEN consente di verificare se un valore rientra in un intervallo di valori. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome dei prodotti e un messaggio che indichi se il loro prezzo è compreso tra 50 e 100. Possiamo farlo in questo modo:

SELECT nombre,
  IF(precio BETWEEN 50 AND 100,
    'Precio en rango',
    'Precio fuera de rango'
  ) AS rango
FROM productos;

In questo caso, utilizziamo BETWEEN per verificare se il prezzo del prodotto è compreso tra 50 e 100. Quindi, utilizziamo IF ELSE per visualizzare un messaggio in base al risultato.

14. SE ALTRO con MI PIACE

L'operatore LIKE consente di cercare modelli nelle stringhe di testo. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome dei prodotti e un messaggio che indichi se il nome contiene la parola "iPhone". Possiamo farlo in questo modo:

SELECT nombre,
  IF(nombre LIKE '%iPhone%',
    'Producto de Apple',
    'Otro producto'
  ) AS tipo
FROM productos;

In questo caso utilizziamo LIKE per verificare se il nome del prodotto contiene la parola "iPhone". Utilizziamo quindi IF ELSE per visualizzare un messaggio in base al risultato.

15. SE ALTRO con REGEXP

L'operatore REGEXP ci permette di cercare modelli più complessi nelle stringhe di testo utilizzando le espressioni regolari . Possiamo combinarlo con IF ELSE per prendere decisioni in base al risultato. Ad esempio, supponiamo di voler ottenere i nomi dei clienti e un messaggio che indichi se il loro indirizzo email è valido o meno. Possiamo farlo in questo modo:

SELECT nombre,
  IF(email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}$',
    'Email válido',
    'Email inválido'
  ) AS validacion
FROM clientes;

In questo caso utilizziamo REGEXP con un'espressione regolare per verificare se l'email del cliente rispetta un formato valido. Utilizziamo quindi IF ELSE per visualizzare un messaggio in base al risultato.

16. IF ELSE con DATE_FORMAT

La funzione DATE_FORMAT ci consente di formattare le date nelle nostre query. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome degli ordini e un messaggio che indichi se sono stati effettuati durante il fine settimana oppure no. Possiamo farlo in questo modo:

SELECT id,
  IF(DATE_FORMAT(fecha, '%w') IN (0, 6),
    'Fin de semana',
    'Día de semana'
  ) AS dia
FROM pedidos;

In questo caso, utilizziamo DATE_FORMAT per ottenere il giorno della settimana della data dell'ordine (0 per domenica, 6 per sabato). Utilizziamo quindi IF ELSE con IN per controllare se il giorno è 0 o 6 e visualizziamo un messaggio in base al risultato.

17. SE ALTRO con GROUP_CONCAT

La funzione GROUP_CONCAT consente di concatenare valori provenienti da più righe in un'unica stringa. Possiamo combinarlo con IF ELSE per prendere decisioni basate sul risultato. Ad esempio, supponiamo di voler ottenere il nome del cliente e un messaggio che indichi se ha acquistato "iPhone" o "Samsung". Possiamo farlo in questo modo:

SELECT c.nombre,
  IF(GROUP_CONCAT(p.nombre) LIKE '%iPhone%', 
    'Compró iPhone',
    IF(GROUP_CONCAT(p.nombre) LIKE '%Samsung%',
      'Compró Samsung',
      'No compró iPhone ni Samsung'
    )
  ) AS mensaje
FROM clientes c
JOIN pedidos pe ON c.id = pe.cliente_id
JOIN productos p ON pe.producto_id = p.id
GROUP BY c.id;

In questo caso utilizziamo GROUP_CONCAT per concatenare i nomi dei prodotti acquistati da ciascun cliente. Utilizziamo quindi IF ELSE con LIKE per verificare se la stringa risultante contiene 'iPhone' o 'Samsung' e visualizziamo un messaggio in base al risultato.

18. SE ALTRO CON AVERE

La clausola HAVING ci permette di filtrare i risultati di una query GROUP BY in base a determinate condizioni. Possiamo combinarla con IF ELSE per prendere decisioni in base al risultato. Ad esempio, supponiamo di voler ottenere il numero di ordini per cliente e un messaggio che indichi se si tratta di un "Cliente VIP" (più di 10 ordini) o di un "Cliente normale". Possiamo farlo in questo modo:

SELECT c.nombre, COUNT(p.id) AS total_pedidos,
  IF(COUNT(p.id) > 10,
    'Cliente VIP',
    'Cliente regular'
  ) AS tipo_cliente
FROM clientes c
JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.id
HAVING COUNT(p.id) > 5;

In questo caso, utilizziamo GROUP BY per raggruppare gli ordini in base al cliente e contiamo il numero di ordini per ciascuno con COUNT. Utilizziamo quindi HAVING per filtrare solo i clienti con più di 5 ordini. Infine, utilizziamo IF ELSE per visualizzare un messaggio a seconda che il totale degli ordini sia maggiore o minore di 10.

  SQL GROUP BY SUM: suggerimenti e trucchi per query efficienti

FAQ su IF ELSE MySQL con esempi

1. Che cos'è l'istruzione IF ELSE in MySQL?

L'istruzione IF ELSE in MySQL è una struttura condizionale che ci permette di eseguire azioni diverse a seconda che una determinata condizione sia soddisfatta o meno.

2. Come utilizzare l'istruzione IF ELSE in MySQL?

La sintassi di base dell'istruzione IF ELSE in MySQL è la seguente:

IF(condición, valor_si_verdadero, valor_si_falso)

3. È possibile annidare più istruzioni IF ELSE in MySQL?

Sì, è possibile annidare più istruzioni IF ELSE per valutare diverse condizioni e prendere decisioni in base ai risultati.

4. IF ELSE può essere combinato con altre funzioni e clausole MySQL?

Sì, IF ELSE può essere combinato con molte altre funzioni e clausole MySQL, come funzioni di aggregazione, sottoquery, CASE, IFNULL, NULLIF, EXISTS, IN, BETWEEN, LIKE, REGEXP, DATE_FORMAT, GROUP_CONCAT, HAVING e altro ancora.

5. Qual è la differenza tra IF ELSE e CASE in MySQL?

Sia IF ELSE che CASE consentono di eseguire azioni diverse in base a determinate condizioni. La differenza principale è che IF ELSE viene utilizzato per valutare una singola condizione ed eseguire un'azione se questa è soddisfatta o meno, mentre CASE viene utilizzato per valutare più condizioni ed eseguire azioni diverse in base al risultato.

6. Esistono delle limitazioni nell'uso di IF ELSE in MySQL?

Non ci sono limitazioni significative all'utilizzo di IF ELSE in MySQL, oltre a quelle della logica e della sintassi delle condizioni valutate. Tuttavia, è importante notare che l'uso eccessivo o improprio di IF ELSE può influire sulle prestazioni delle query e rendere il codice più difficile da leggere e gestire.

Conclusione di IF ELSE MySQL con esempi

In questo articolo abbiamo imparato cos'è l'istruzione IF ELSE in MySQL e come viene utilizzata per eseguire diverse azioni in base a determinate condizioni. Abbiamo visto 18 esempi pratici di utilizzo di IF ELSE, combinandola con altre funzioni e clausole di MySQL come funzioni di aggregazione, subquery, CASE, IFNULL, NULLIF, EXISTS, IN, BETWEEN, LIKE, REGEXP, DATE_FORMAT, GROUP_CONCAT e HAVING.

Spero che questi esempi vi siano stati utili e che vi aiutino a comprendere meglio come utilizzare le istruzioni IF ELSE nelle vostre query MySQL . E non dimenticate di condividere questo articolo con i vostri amici e colleghi se lo avete trovato interessante!