Istruzione CASE e caso nidificato in SQL Server: esempio T-SQL
Panoramica del caso nella vita reale!
Ancora una volta, nella vita reale, eseguiamo azioni diverse a seconda del risultato di condizioni diverse.
Per elaborare di più, considera l'esempio seguente:
- Se i biglietti aerei costano meno di $ 100, visiterò Los Angeles.
- Se i biglietti aerei costano tra $ 100 e $ 200, visiterò New York
- Se i biglietti aerei costano tra $ 200 e $ 400, visiterò l’Europa
- Altrimenti preferirò visitare qualche località turistica nelle vicinanze.
Consideriamo la categorizzazione di Condizione e Azione separatamente dall'esempio sopra riportato di seguito:
| Condizioni – Biglietti aerei | Azioni eseguite, solo se Condizione è TRUE |
| Less di $ 100 | Visitare Los Angeles |
| Tra $ 100 a $ 200 | Visita New York |
| Tra $ 200 a $ 400 | Visita l'Europa |
| Nessuna delle condizioni di cui sopra è stata soddisfatta | Località turistica nelle vicinanze |
Nell'esempio sopra, possiamo vedere che il risultato delle diverse condizioni governa l'azione separata. Ad esempio, il Visitatore compirà l'atto di visitare New York solo a condizione che il biglietto aereo sia compreso tra $ 100 e $ 200.
Allo stesso modo, l'istruzione MS SQL CASE fornisce anche la possibilità di agire per eseguire diverse istruzioni T-SQL in base al risultato di condizioni diverse.
Che cos'è l'istruzione CASE in SQL Server?
Istruzione CASE in SQL Server è l'estensione dell'istruzione IF…ELSE. A differenza di IF…ELSE, dove è consentita solo una condizione al massimo, CASE consente all'utente di applicare più condizioni per eseguire diversi insiemi di azioni in MS SQL. Restituisce un valore corrispondente associato alla condizione definita dall'utente.
Nelle sezioni seguenti impareremo come utilizzare Case in SQL e il suo concetto.
In MS SQL, ci sono due tipi di CASE.
- CASO semplice
- CASO cercato
CASO semplice
La sintassi per Simple Case
CASE <Case_Expression>
WHEN Value_1 THEN Statement_1
WHEN Value_2 THEN Statement_2
.
.
WHEN Value_N THEN Statement_N
[ELSE Statement_Else]
END AS [ALIAS_NAME]
Qui,
- Il parametro Case_Expression denota l'espressione alla quale alla fine saremo paragonati Valore_1, Valore_2, ...
- I parametri Dichiarazione_1, Dichiarazione_2... denotano le istruzioni che verranno eseguite se Case_Expression = Valore_1, Case_Expression = Valore_2, ... e così via.
- In poche parole, il condizione è se Case_Expression = Value_N e ACTION sono l'esecuzione di Statement_N se il il risultato sopra è VERO.
- PSEUDONIMO è facoltativo ed è il nome alias assegnato al risultato dell'istruzione CASE di SQL Server. Utilizzato principalmente quando utilizziamo Case nella clausola di selezione del server SQL.
Regole per il caso semplice
- Simple Case consente solo il controllo dell'uguaglianza di Case_Expression da Value_1 a Value_N.
- Case_Expression viene confrontato con Value, in ordine a partire dal primo valore, ovvero Value_1. Di seguito è riportato l'approccio esecutivo:
- Se Case_Expression è equivalente a Value_1, le ulteriori istruzioni WHEN…THEN verranno saltate e l'esecuzione CASE terminerà immediatamente.
- Se Case_Expression non corrisponde a Value_1, Case_Expression viene confrontato con Value_2 per l'equivalenza. Questo processo di confronto Case_Expression con Value continuerà finché Case_Expression non troverà il valore equivalente corrispondente dall'insieme di Value_1, Value_2,...
- Se non corrisponde nulla, il controllo va all'istruzione ELSE e Statement_Else verrà eseguito.
- ALTRO è facoltativo.
- Se ELSE non è presente e Case_Expression non corrisponde a nessuno dei valori, allora Verrà visualizzato il valore Null.
Il diagramma seguente illustra il flusso di esecuzione di Simple Case.

Esempi
Assunzione: Supponiamo di avere la tabella as "Guru99" con due colonne e quattro righe come mostrato di seguito:
Noi useremo "Guru99" tabella in ulteriori esempi
Domanda 1: CASO SEMPLICE con l'opzione NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Risultato: Il diagramma seguente spiega il flusso di esecuzione di un CASO SEMPLICE senza ALTRO.
Query 2: CASO SEMPLICE con l'opzione ELSE.
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Risultato: Il diagramma seguente spiega il flusso di esecuzione di un CASO SEMPLICE con ELSE.
CASO cercato
La sintassi per Caso cercato
CASE
WHEN <Boolean_Expression_1> THEN Statement_1
WHEN <Boolean_Expression_2> THEN Statement_2
.
.
WHEN <Boolean_Expression_N> THEN Statement_N
[ELSE Statement_Else]
END AS [ALIAS_NAME]
Qui,
- Il parametro Boolean_Expression_1, …denota l'espressione che verrà valutata come TRUE o FALSE.
- I parametri Statement_1, Statement_2… indicano le istruzioni che verranno eseguite se il risultato corrispondente Boolean_Expression_1, Boolean_Expression_2 è TRUE.
- In poche parole, Condition è Boolean_Expression_1,… e ACTION è l'esecuzione di Statement_N se sopra boolean_Expression_1 è TRUE.
- ALIAS_NAME è facoltativo ed è il nome alias assegnato al risultato dell'istruzione CASE. Utilizzato principalmente quando utilizziamo CASE nella clausola select.
Regole per il caso cercato
- A differenza del caso semplice, Case cercato non si limita al solo controllo dell'uguaglianza ma consente l'espressione booleana.
- L'espressione booleana viene valutata, in ordine, a partire dalla prima espressione booleana, ovvero Boolean_expression_1. Di seguito è riportato l'approccio esecutivo:
- Se Boolean_expression_1 è TRUE, le ulteriori istruzioni WHEN…THEN verranno saltate e l'esecuzione di CASE terminerà immediatamente.
- Se Boolean_expression_1 è FALSE, la condizione Boolean_expression_2 viene valutata come TRUE. Questo processo di valutazione Boolean_expression continuerà finché uno dei Boolean_expression non restituirà TRUE.
- Se non corrisponde nulla, il controllo va all'istruzione ELSE e Statement_Else verrà eseguito.
- Come il caso semplice, anche ELSE è facoltativo nel caso di ricerca.
- Se ELSE non è presente e nessuna delle espressioni Booleane restituisce TRUE, verrà visualizzato Null.
Sotto il diagramma illustrare il flusso di esecuzione del Caso perquisito.
Esempi
Query 1: CASO RICERCATO con l'opzione NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Risultato: Sotto il diagramma spiega il flusso di esecuzione di CASO RICERCATO con NESSUN ALTRO.
Domanda 2: CASO RICERCATO con la ELSE opzione.
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Risultato: Sotto il diagramma spiega il flusso di esecuzione of il CASO RICERCATO con ALTRO.
Differenza tra approccio esecutivo: SEMPLICE e RICERCA CASO.
Diamo un'occhiata a CASO SEMPLICE esempio di seguito:
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Qui, 'Nome_tutorial' fa parte dell'espressione CASE in SQL. Poi 'Nome_tutorial' il valore viene confrontato con ciascuno QUANDO valori, cioè 'SQL'… finché 'Tutorial_name' non corrisponde ai valori WHEN.
Al contrario, RICERCA CASO l'esempio non ha CASO Espressione:
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Ecco, ognuno QUANDO dichiarazione ha la sua Espressione booleana condizionale. Ogni Espressione booleana cioè Tutorial_name = 'SQL',… viene valutato VERO FALSO fino a quando primo booleano espressione che restituisce TRUE.
Differenza tra caso semplice e caso cercato
| Caso semplice | Caso perquisito |
|---|---|
| La parola chiave CASE è immediatamente seguita da CASE_Expression e prima dell'istruzione WHEN.
Per esempio: |
La parola chiave Case è seguita dall'istruzione WHEN e non esiste alcuna espressione tra CASE e WHEN.
Per esempio: |
| Nel caso semplice, VALUE esiste per ogni istruzione WHEN. Questi valori: Value_1, Value_2… vengono confrontati in sequenza con la singola CASE_Expression. Il risultato viene valutato per la condizione VERO/FALSO per ciascuna istruzione WHEN.
Per esempio: |
Nel caso cercato, Boolean_Expression esiste per ogni istruzione WHEN. Queste Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… valuta la condizione TRUE/FALSE per ciascuna istruzione WHEN.
Per esempio: |
| Il caso semplice supporta solo il controllo di uguaglianza. Cioè se CASE_Expression = VALUE_1, VALUE_2…
Per esempio: |
Con Boolean_Expression_N, Search Case supporta qualsiasi operazione che risulta in un valore booleano. Include l'operatore uguale e diverso da.
Per esempio: |
CASE nidificato: CASE in IF ELSE
Possiamo usare CASO all'interno di IF ELSE. Di seguito è riportato l'esempio di codice MS-SQL
DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
PRINT 'Visit Nearby Tourist Location';
ELSE
BEGIN
SELECT
CASE
WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
END AS Location
END
Nell'esempio sopra CASE è NESTED all'interno dell'istruzione IF…ELSE:
Innanzitutto, l'istruzione IF verrà eseguita e se la condizione Case in Server SQL è False, verrà eseguita l'istruzione ELSE.
Altrimenti contiene l'istruzione CASE nidificata in SQL al suo interno. A seconda del valore del biglietto di volo, verrà visualizzato uno dei seguenti risultati:
- Il sistema stamperà "Visita località turistica nelle vicinanze" se i biglietti aerei costano > $ 400
- Il sistema stamperà "Visita Los Angeles" se i biglietti aerei sono compresi tra $ 0 e $ 100
- Il sistema stamperà "Visita New York" se i biglietti aerei sono compresi tra $ 101 e $ 200
- Il sistema stamperà "Visit Europe" se i biglietti aerei sono compresi tra $ 201 e $ 400
CASE annidato: CASE all'interno di CASE
Possiamo usare CASE all'interno di CASE in SQL. Di seguito è riportato l'esempio di codice MS-SQL
DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN
CASE
WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
END
END AS Location
Nell'esempio sopra CASE è NESTED all'interno di un'altra istruzione CASE:
Il sistema inizia con l'esecuzione del CASE esterno. Se Flight_Ticket < $400 verrà eseguito il CASE interno.
A seconda del valore del biglietto aereo, verrà visualizzato uno dei seguenti risultati:
- Il sistema stamperà "Visita località turistica nelle vicinanze" se i biglietti aerei costano > $ 400
- Il sistema stamperà "Visita Los Angeles" se i biglietti aerei sono compresi tra $ 0 e $ 100
- Il sistema stamperà "Visita New York" se i biglietti aerei sono compresi tra $ 101 e $ 200
- Il sistema stamperà "Visit Europe" se i biglietti aerei sono compresi tra $ 201 e $ 400
CASO con AGGIORNAMENTO
Presupposto: supponiamo di avere la tabella come "Guru99" con due colonne e quattro righe come visualizzato di seguito:
Utilizzeremo la tabella "Guru99" in ulteriori esempi
Possiamo usare CASE con UPDATE. Di seguito è riportato l'esempio di codice MS-SQL:
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
Nell'esempio precedente CASE viene utilizzato nell'istruzione UPDATE.
A seconda del valore Tutorial_Name, la colonna Tutorial_Name riceverà l'aggiornamento con il valore THEN Statement.
- Se Tutorial_Name = 'SQL' ALLORA aggiorna Tutorial_Name in 'Structured Query Language'
- Se Tutorial_Name = 'PL/SQL' ALLORA aggiorna Tutorial_Name in 'Oracle PL/SQL'
- Se Tutorial_Name = 'MSSQL' ALLORA aggiorna Tutorial_Name in 'Microsoft SQL'
- Se Tutorial_Name = 'Hadoop' ALLORA aggiorna Tutorial_Name in 'Apache Hadoop'
Interroghiamo la tabella Guru99 per verificare il valore aggiornato:
CASO con Ordina per
Possiamo usare CASE con Order By. Di seguito è riportato l'esempio di codice MS-SQL:
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
Qui CASE viene utilizzato con Order By.
@Order è impostato su 1 e come prima espressione booleana QUANDO viene valutata TRUE, Tutorial_ID è selezionato per Order by Condition
Fatti interessanti!
- CASE può essere annidato in un altro CASE così come in un'altra istruzione IF…ELSE.
- Oltre a SELECT, CASE può essere utilizzato con un altro SQL clausola come UPDATE, ORDER BY.
Sintesi
- In MS SQL, esistono due tipi di CASE: CASE semplice e CASE cercato
- ELSE è facoltativo nell'istruzione CASE.











