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.

  1. CASO semplice
  2. 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.

Funzionamento della semplice dichiarazione del caso
Funzionamento della semplice dichiarazione del caso

Esempi

Assunzione: Supponiamo di avere la tabella as "Guru99" con due colonne e quattro righe come mostrato di seguito:

Caso semplice in SQL Server

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.

Caso semplice in SQL Server

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 semplice in SQL Server

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.

Funzionamento della dichiarazione del caso cercato

Funzionamento della dichiarazione del caso cercato

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.

Esempio CASE cercato in SQL Server

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.

CASO cercato in SQL Server

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:
CASO
QUANDO Valore_1 THEN Istruzione_1…

La parola chiave Case è seguita dall'istruzione WHEN e non esiste alcuna espressione tra CASE e WHEN.

Per esempio:
CASO QUANDO ALLORA Dichiarazione_1…

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:
CASO
QUANDO Valore_1 THEN Istruzione_1…
QUANDO Valore_2 THEN Istruzione_2…

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:
CASI
QUANDO ALLORA Dichiarazione_1...
QUANDO ALLORA Dichiarazione_2...

Il caso semplice supporta solo il controllo di uguaglianza. Cioè se CASE_Expression = VALUE_1, VALUE_2…

Per esempio:
CASO WHEN Value_1 THEN Statement_1…Nell'esempio precedente, l'unica operazione eseguita dal sistema è verificare se Case_Expression = Value_1

Con Boolean_Expression_N, Search Case supporta qualsiasi operazione che risulta in un valore booleano. Include l'operatore uguale e diverso da.

Per esempio:
CASO QUANDO THEN Statement_1… Nell'esempio precedente, Boolean_Expression_1 può contenere sia l'operatore 'uguale a' che 'diverso da' come A = B, A != B.

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 nidificato in SQL Server

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

Esempio CASE nidificato in SQL Server

CASO con AGGIORNAMENTO

Presupposto: supponiamo di avere la tabella come "Guru99" con due colonne e quattro righe come visualizzato di seguito:

CASO con AGGIORNAMENTO in SQL Server

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'

CASO con AGGIORNAMENTO in SQL Server

Interroghiamo la tabella Guru99 per verificare il valore aggiornato:

CASO con AGGIORNAMENTO in SQL Server

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

CASO con Ordina per in SQL Server

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.

Riassumi questo post con: