CASE-instructie en geneste case in SQL Server: T-SQL-voorbeeld

Overzicht van Case in het echt!

Nogmaals, in het echte leven voeren we verschillende acties uit, afhankelijk van de uitkomst van verschillende omstandigheden.

Om meer uit te werken, bekijk het onderstaande voorbeeld:

  • Als vliegtickets minder dan $ 100 kosten, dan ga ik naar Los Angeles.
  • Als vliegtickets tussen de $ 100 en $ 200 kosten, dan ga ik naar New York
  • Als vliegtickets tussen de €200 en €400 kosten, dan ga ik naar Europa
  • Anders ga ik liever naar een nabijgelegen toeristische plek.

Laten we overwegen om Conditie en Actie afzonderlijk van het bovenstaande voorbeeld hieronder te categoriseren:

Voorwaarden - Vliegtickets Uitgevoerde acties, alleen als Conditie is TRUE
Less dan $ 100 Bezoek Los Angeles
Tussen $ 100 tot $ 200 Bezoek New York
Tussen $ 200 tot $ 400 Bezoek Europa
Aan geen van bovenstaande voorwaarden werd voldaan Nabijgelegen toeristische plek

In het bovenstaande voorbeeld kunnen we zien dat de uitkomst van de verschillende omstandigheden bepalend is voor afzonderlijke actie. Bezoeker zal bijvoorbeeld alleen New York bezoeken als het vliegticket tussen de $100 en $200 kost.

Op dezelfde manier biedt de MS SQL CASE-instructie ook de mogelijkheid om actie te ondernemen door verschillende T-SQL-instructie uit te voeren op basis van de uitkomst van verschillende omstandigheden.

Wat is de CASE-instructie in SQL Server?

CASE-instructie in SQL Server is de uitbreiding van de IF...ELSE-instructie. In tegenstelling tot IF…ELSE, waarbij slechts het maximum van één voorwaarde is toegestaan, kan de gebruiker met CASE meerdere voorwaarden toepassen om verschillende reeksen acties uit te voeren in MS SQL. Het retourneert een overeenkomstige waarde die is gekoppeld aan de voorwaarde die door de gebruiker is gedefinieerd.

In de volgende secties gaan we dieper in op het gebruik van Case in SQL en het bijbehorende concept.

In MS SQL, zijn er twee soorten CASE.

  1. Eenvoudig GEVAL
  2. CASE gezocht

Eenvoudig GEVAL

De syntaxis voor 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]

Hier

  • De parameter Case_Expressie geeft de uitdrukking aan waarmee we uiteindelijk zullen worden vergeleken Waarde_1, Waarde_2, autodashborden en meer
  • De parameters Verklaring_1, Verklaring_2… geven de instructies aan die zullen worden uitgevoerd als Case_Expression = Waarde_1, Case_Expressie = Waarde_2, … enzovoort.
  • In een notendop: de voorwaarde is of Case_Expression = Waarde_N en ACTION is de uitvoering van Statement_N als de Bovenstaand resultaat is WAAR.
  • ALIAS NAAM is optioneel en is de aliasnaam die wordt gegeven aan het resultaat van de SQL Server CASE-instructie. Meestal gebruikt wanneer we Case gebruiken in de selectieclausule van de SQL-server.

Regels voor eenvoudige gevallen

  • Simple Case staat alleen gelijkheidscontrole toe van Case_Expression met Value_1 tot Value_N.
  • De Case_Expressie wordt vergeleken met Waarde, in de volgorde beginnend bij de eerste waarde, dat wil zeggen Waarde_1. Hieronder vindt u de uitvoeringsaanpak:
  • Als Case_Expression gelijk is aan Waarde_1, worden verdere WHEN…THEN-instructies overgeslagen en wordt de uitvoering van CASE onmiddellijk END.
  • Als Case_Expression niet overeenkomt met Waarde_1, wordt Case_Expressie vergeleken met Waarde_2 voor gelijkwaardigheid. Dit proces van het vergelijken van Case_Expression met Value gaat door totdat Case_Expression een overeenkomende equivalente waarde vindt uit de set van Value_1, Value_2,...
  • Als er niets overeenkomt, gaat de controle naar de ELSE-instructie en wordt Statement_Else uitgevoerd.
  • ANDERS is optioneel.
  • Als ELSE niet aanwezig is en Case_Expression overeenkomt met geen van de waarden, dan Null wordt weergegeven.

Het onderstaande diagram illustreert de uitvoeringsstroom van Simple Case.

Werking van een eenvoudige casusverklaring
Werking van een eenvoudige casusverklaring

Voorbeelden

Veronderstelling: Stel dat we de tabel hebben als 'Guru99' met twee kolommen en vier rijen zoals hieronder weergegeven:

Eenvoudig geval in SQL Server

We zullen gebruiken 'Guru99' tabel in verdere voorbeelden

Query 1: EENVOUDIG GEVAL met de optie GEEN ANDERS

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

Resultaat: Het onderstaande diagram legt de uitvoeringsstroom uit van een EENVOUDIG GEVAL MET GEEN ANDERS.

Eenvoudig geval in SQL Server

Query 2: EENVOUDIG GEVAL met de ELSE-optie.

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

Resultaat: Het onderstaande diagram legt de uitvoeringsstroom uit van een SIMPLE CASE met ELSE.

Eenvoudig geval in SQL Server

CASE gezocht

De syntaxis voor gezochte casus

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]

Hier

  • De parameter Boolean_Expression_1, …geeft de expressie aan die wordt geëvalueerd als TRUE of FALSE.
  • De parameters Statement_1, Statement_2… geven de instructies aan die worden uitgevoerd als het overeenkomstige resultaat Boolean_Expression_1, Boolean_Expression_2 WAAR is.
  • In een notendop is Conditie Booleaanse_Expressie_1,... en ACTION is de uitvoering van Verklaring_N als bovenstaande booleaanse_Expressie_1 WAAR is.
  • ALIAS_NAME is optioneel en is de aliasnaam die wordt gegeven aan het resultaat van de CASE-instructie. Meestal gebruikt wanneer we CASE gebruiken in de select-clausule.

Regels voor gezochte casus

  • In tegenstelling tot het eenvoudige geval is Searched Case niet beperkt tot alleen gelijkheidscontrole, maar is Booleaanse expressie mogelijk.
  • De Booleaanse expressie wordt geëvalueerd, in de volgorde beginnend bij de eerste Booleaanse expressie, dwz Booleaanse_expressie_1. Hieronder vindt u de uitvoeringsaanpak:
    • Als Booleaanse_expressie_1 TRUE is, worden verdere WHEN…THEN-instructies overgeslagen en wordt de uitvoering van CASE onmiddellijk END.
    • Als Booleaanse_expressie_1 ONWAAR is, wordt Booleaanse_expressie_2 geëvalueerd voor de voorwaarde WAAR. Dit proces van het beoordelen van Booleaanse_expressie gaat door totdat een van de Booleaanse_expressies WAAR retourneert.
    • Als er niets overeenkomt, gaat de controle naar de ELSE-instructie en wordt Statement_Else uitgevoerd.
  • Net als Simple Case is ELSE ook optioneel in Search Case.
  • Als ELSE niet aanwezig is en geen van de Booleaanse expressies TRUE retourneert, wordt Null weergegeven.

Hieronder diagram illustreren de uitvoeringsstroom van de Zaak gezocht.

Werking van de gezochte casusverklaring

Werking van de gezochte casusverklaring

Voorbeelden

Query 1: ZOEKEN CASE met de optie GEEN ANDERS

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

Resultaat: Onderstaand schema legt de uitvoeringsstroom uit van de GEZOCHT GEVAL met NIET ANDERS.

Gezocht CASE-voorbeeld in SQL Server

Zoekopdracht 2: ZOEKEN CASE met de ELSE optie.

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

Resultaat: Onderstaand schema legt de uitvoeringsstroom uit of de GEZOCHTE ZAAK met ANDERS.

CASE gezocht in SQL Server

Verschil tussen uitvoeringsaanpak: SIMPLE en SEARCH CASE.

Laten we eens kijken EENVOUDIG GEVAL voorbeeld hieronder:

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

Hier 'Tutorial_naam' is een onderdeel van de CASE-expressie in SQL. Dan 'Tutorial_naam' waarde wordt met elk vergeleken WANNEER waarden, dat wil zeggen 'SQL'… totdat 'Tutorial_name' overeenkomt met WHEN-waarden.

In tegendeel, ZOEK GEVAL voorbeeld heeft nr CASE-expressie:

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

Hier, elk WANNEER verklaring heeft een Voorwaardelijke Booleaanse expressie. Elke Booleaanse uitdrukking dwz Tutorial_name = 'SQL',… wordt geëvalueerd WAAR ONWAAR tot eerste Booleaanse waarde expressie die evalueert naar TRUE.

Verschil tussen eenvoudig en gezocht geval

Eenvoudig geval Zaak gezocht
Het trefwoord CASE wordt onmiddellijk gevolgd door de CASE_Expression en vóór de WHEN-instructie.

bv:
GEVAL
WHEN Waarde_1 THEN Verklaring_1…

Het sleutelwoord Case wordt gevolgd door de instructie WHEN, en er is geen expressie tussen CASE en WHEN.

bv:
GEVAL WANNEER DAN Verklaring_1…

In Simple Case bestaat VALUE voor elke WHEN-instructie. Deze waarden: Waarde_1, Waarde_2... Worden opeenvolgend vergeleken met een enkele CASE_Expressie. Het resultaat wordt geëvalueerd voor de TRUE/FALSE-voorwaarde voor elke WHEN-instructie.

bv:
GEVAL
WHEN Waarde_1 THEN Verklaring_1…
WHEN Waarde_2 THEN Verklaring_2…

In Searched Case bestaat Boolean_Expression voor elke WHEN-instructie. Deze Booleaanse_Expressies: Booleaanse_Expressie_1, Booleaanse_Expressie_2,… evalueert de TRUE/FALSE-voorwaarde voor elke WHEN-instructie.

bv:
CASE
WANNEER DAN Verklaring_1…
WANNEER DAN Verklaring_2…

Simple Case ondersteunt alleen gelijkheidscontrole. Dat wil zeggen of CASE_Expression = VALUE_1, VALUE_2...

bv:
GEVAL WHEN Waarde_1 DAN Instructie_1…In het bovenstaande voorbeeld is de enige bewerking die door het systeem wordt uitgevoerd het controleren of Case_Expression = Waarde_1

Met Boolean_Expression_N ondersteunt Search Case elke bewerking die resulteert in een Booleaanse waarde. Het omvat de operator equal en not equal to.

bv:
GEVAL WANNEER DAN Statement_1… In bovenstaand voorbeeld kan Booleaanse_Expressie_1 zowel de operator 'gelijk aan' als 'niet gelijk aan' bevatten, zoals A = B, A != B.

Geneste CASE: CASE in IF ELSE

We kunnen gebruik maken CASE binnen INDIEN ANDERS. Hieronder ziet u het voorbeeld van MS-SQL-code

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

In het bovenstaande voorbeeld is CASE NESTED binnen de IF…ELSE-instructie:

Eerst wordt de IF-instructie uitgevoerd en als Case Condition in SQL-server Is False, dan wordt de ELSE-instructie uitgevoerd.

Anders bevat Nested CASE Statement in SQL erin. Afhankelijk van de waarde van het vliegticket, wordt een van de volgende resultaten weergegeven:

  • Het systeem drukt 'Bezoek nabijgelegen toeristische locatie' af als vliegtickets > $ 400 kosten
  • Het systeem drukt 'Bezoek Los Angeles' af als de vliegtickets TUSSEN $0 EN $100 kosten
  • Het systeem drukt 'Bezoek New York' af als vliegtickets TUSSEN $101 EN $200 kosten
  • Het systeem drukt 'Visit Europe' af als vliegtickets TUSSEN $201 EN $400 kosten

Geneste CASE in SQL Server

Geneste CASE: CASE binnen CASE

We kunnen CASE binnen CASE in SQL gebruiken. Hieronder ziet u het voorbeeld van MS-SQL-code

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

In het bovenstaande voorbeeld is CASE NESTED binnen een andere CASE-instructie:

Het systeem begint met het uitvoeren van de buitenste CASE. Als Flight_Ticket < $400, wordt de innerlijke CASE uitgevoerd.

Afhankelijk van de waarde van het vliegticket wordt een van de volgende resultaten weergegeven:

  • Het systeem drukt 'Bezoek nabijgelegen toeristische locatie' af als vliegtickets > $ 400 kosten
  • Het systeem drukt 'Bezoek Los Angeles' af als de vliegtickets TUSSEN $0 EN $100 kosten
  • Het systeem drukt 'Bezoek New York' af als vliegtickets TUSSEN $101 EN $200 kosten
  • Het systeem drukt 'Visit Europe' af als vliegtickets TUSSEN $201 EN $400 kosten

Genest CASE-voorbeeld in SQL Server

CASE met UPDATE

Veronderstelling: Stel dat we de tabel 'Guru99' hebben met twee kolommen en vier rijen, zoals hieronder weergegeven:

CASE met UPDATE in SQL Server

In verdere voorbeelden zullen we de tabel 'Guru99' gebruiken

We kunnen CASE gebruiken met UPDATE. Hieronder ziet u het voorbeeld van MS-SQL-code:

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
	)

In het bovenstaande voorbeeld wordt CASE gebruikt in de UPDATE-instructie.

Afhankelijk van de waarde van Tutorial_Name krijgt de kolom Tutorial_Name de update met de THEN-instructiewaarde.

  • Als Tutorial_Name = 'SQL' DAN update Tutorial_Name naar 'Structured Query-taal'
  • Als Tutorial_Name = 'PL/SQL' DAN update Tutorial_Name naar 'Oracle PL/SQL'
  • Als Tutorial_Name = ‘MSSQL’ DAN update Tutorial_Name naar ‘Microsoft SQL'
  • Als Tutorial_Name = 'Hadoop' DAN update Tutorial_Name naar 'Apache Hadoop'

CASE met UPDATE in SQL Server

Laten we de Guru99-tabel doorzoeken om de bijgewerkte waarde te controleren:

CASE met UPDATE in SQL Server

CASE met Bestel op

We kunnen CASE gebruiken met Order By. Hieronder ziet u het voorbeeld van MS-SQL-code:

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

Hier wordt CASE gebruikt met Order By.

@Order is ingesteld op 1 en als de eerste WHEN Booleaanse expressie evalueert naar TRUE, wordt Tutorial_ID geselecteerd voor Order by Condition

CASE met Bestellen op in SQL Server

Interessante feiten!

  • CASE kan zowel in een andere CASE als in een andere IF…ELSE-instructie worden genest.
  • Naast SELECT kan CASE met een ander worden gebruikt SQL clausule zoals UPDATE, ORDER BY.

Samenvatting

  • In MS SQL zijn er twee soorten CASE: eenvoudige CASE en doorzochte CASE
  • ELSE is optioneel in de CASE-instructie.