SQL CASE ti permette di ma­ni­po­la­re un database in­ter­ro­gan­do de­ter­mi­na­te con­di­zio­ni e vi­sua­liz­zan­do i risultati. La con­di­zio­ne CASE ha quindi un approccio simile all’istru­zio­ne If-then-else.

Cos’è SQL CASE?

In molti linguaggi di database e linguaggi di pro­gram­ma­zio­ne si usa am­pia­men­te l’istru­zio­ne If-then-else, che esegue un’azione finché un de­ter­mi­na­to requisito è sod­di­sfat­to. Quando non lo è più, il programma chiude il ciclo o esegue un’altra azione. Lo Struc­tu­red Query Language si basa su un principio analogo, mettendo a di­spo­si­zio­ne SQL CASE. Questa istru­zio­ne esegue una lista di con­di­zio­ni e, se una con­di­zio­ne è sod­di­sfat­ta, risponde con un de­ter­mi­na­to valore. Se non viene sod­di­sfat­ta nessuna con­di­zio­ne, risponde con un valore definito sotto ELSE. Se non è presente una li­mi­ta­zio­ne ELSE e le con­di­zio­ni non sono sod­di­sfat­te, re­sti­tui­sce NULL.

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

Sintassi e fun­zio­na­men­to

La sintassi di base di SQL CASE si presenta come segue:

SELECT colonna1, colonna2, …,
CASE
	WHEN condizione1 THEN risultato1
END AS nome
FROM nome_della_tabella;
sql

Con il comando SQL SELECT indichi le colonne da con­si­de­ra­re. Con CASE controlli la con­di­zio­ne. Se è sod­di­sfat­ta (ovvero è true), viene ri­pro­dot­to il valore del risultato. END AS chiude il ciclo. FROM indica in quale tabella deve essere eseguito questo ciclo.

Con la li­mi­ta­zio­ne ELSE opzionale, la sintassi si presenta come segue:

SELECT colonna1, colonna2, …,
CASE
	WHEN condizione1 THEN risultato1
	ELSE altro_risultato
END AS nome
FROM nome_della_tabella;
sql

Esempio di con­di­zio­ne

Per il­lu­stra­re il fun­zio­na­men­to di SQL CASE creiamo una tabella semplice chiamata “Lista clienti”. Qui in­di­chia­mo un numero cliente, il nome del cliente, la sua località, la data dell’ordine, il numero di articoli ordinati e l’importo pagato in euro.

Numero cliente Nome Località Data Articolo Importo totale
1427 Russo Roma 1/13/2024 14 634
1377 Rossi Milano 1/19/2024 9 220
1212 Bianchi Milano 1/3/2024 15 400
1431 Mancini Palermo 1/19/2024 22 912
1118 Innocenti Firenze 2/1/2024 10 312

Ora usiamo la con­di­zio­ne per elaborare la lista. Per gli importi totali superiori a 400 euro deve essere re­sti­tui­to un de­ter­mi­na­to testo. Lo stesso vale per gli importi sotto 400 euro. Usiamo la li­mi­ta­zio­ne ELSE per gli ordini di importo pari esat­ta­men­te a 400 euro. Come vedi, puoi anche in­ter­ro­ga­re più con­di­zio­ni in suc­ces­sio­ne. Di seguito la sintassi del nostro esempio:

SELECT numero cliente, nome, località, data, articolo, importo totale
CASE
	WHEN importo totale > 400 THEN 'Il valore d'acquisto è superiore a 400 euro'
	WHEN importo totale < 400 THEN 'Il valore d'acquisto è inferiore a 400 euro'
	ELSE 'Il valore d'acquisto è di esattamente 400 euro'
END AS dettagli ordine
FROM lista clienti;
sql

L’output si pre­sen­te­rà come segue:

Numero cliente Nome Località Data Articoli Importo totale Dettagli ordine
1427 Russo Roma 1/13/2024 14 634 Il valore d’acquisto è superiore a 400 euro
1377 Rossi Milano 1/19/2024 9 220 Il valore d’acquisto è inferiore a 400 euro
1212 Bianchi Milano 1/3/2024 15 400 Il valore d’acquisto è di esat­ta­men­te 400 euro
1431 Mancini Palermo 1/19/2024 22 912 Il valore d’acquisto è superiore a 400 euro
1118 Innocenti Firenze 2/1/2024 10 312 Il valore d’acquisto è inferiore a 400 euro

Com­bi­na­zio­ne con altre istru­zio­ni

Puoi in­ter­ro­ga­re le con­di­zio­ni anche all’interno di altre istru­zio­ni. Di seguito ordiniamo le voci per numero cliente. Se non è indicato (ovvero è NULL), al suo posto deve essere con­si­de­ra­to il nome del cliente. Qui il relativo codice:

SELECT numero cliente, nome, località, data, articolo, importo totale
FROM lista clienti
ORDER BY
(CASE
		WHEN numero cliente IS NULL THEN nome
		ELSE numero cliente
END);
sql

L’output è il seguente:

Numero cliente Nome Località Data Articolo Importo totale
1118 Innocenti Firenze 2/1/2024 10 312
1212 Bianchi Milano 1/3/2024 15 400
1377 Rossi Milano 1/19/2024 9 220
1427 Russo Roma 1/13/2024 14 634
1431 Mancini Palermo 1/19/2024 22 912
Consiglio

Con l’hosting SQL Server di IONOS puoi scegliere tra MSSQL, MySQL o MariaDB. Potrai contare su pre­sta­zio­ni straor­di­na­rie, una solida ar­chi­tet­tu­ra di sicurezza e una con­su­len­za per­so­na­liz­za­ta!

Vai al menu prin­ci­pa­le