Introductie in het SQL CASE statement
In veel programmeertalen maak je gebruik van als -> dan
statements om logica toe te passen.
Denk hierbij aan het volgende scenario:
als <scenario_1>:
<code indien scenario_1>
als <scenario_2>:
<code indien scenario_2>
...
anders:
<code indien geen vorige scenario>
Om in SQL als -> dan
logica toe te passen maak je gebuik van een CASE
statement.
Hierbij maak je ook gebruik van WHEN
, THEN
, ELSE
en END
uitdrukkingen.
Wil je op je eigen computer meedoen met deze tutorial? Volg dan deze stappen om SQL en PgAdmin te installeren en de database in te laden.
Inhoud van deze blog over SQL CASE
Onderstaand overzicht geeft een beeld van de onderwerpen die we zullen behandelen in deze blog. Door te klikken op een onderwerp spring je er direct heen.
- SQL CASE voorbeeld
- Een nieuwe kolom vanuit SQL CASE een naam geven met AS
- Gebruik van functies i.c.m. SQL CASE
- Gebruik van logical operators i.c.m. SQL CASE
- Samenvatting van deze blog over SQL CASE
1. SQL CASE voorbeeld
Om helder te maken waarom SQL CASE handig is zullen we beginnen met een voorbeeld.
Hiervoor gebruiken we de IMDb voorbeeld dataset die beschreven staat op deze pagina. In de database zit een hoop informatie over allerlei films. Je kunt de dataset ook downloaden via de pagina en als je nog geen mogelijkheid hebt om met SQL te werken op jouw computer dan kun je deze installatie-stappen volgen.
Bekijk het volgende SQL statement eens:
SELECT
name,
year,
CASE
WHEN year > 1986 THEN 'After 1986'
WHEN year = 1986 THEN 'From 1986'
ELSE 'Before 1986'
END
FROM
movies;
name | year | case |
---|---|---|
Aliens | 1986 | From 1986 |
Animal House | 1978 | Before 1986 |
Apollo 13 | 1995 | After 1986 |
... | ... | ... |
Columns: 3
Rows: 36
Hier gebeurt het volgende:
- We selecteren kolommen
name
enyear
uit tabelmovies
. Dit wordt gedaan met SQL SELECT. - We passen een
CASE
statement toe.- Als (
WHEN
) waarden in kolomyear
groter zijn dan1986
, dan (THEN
) verkrijgen we waardeAfter 1986
. - Als (
WHEN
) waarden in kolomyear
gelijk zijn aan1986
, dan (THEN
) verkrijgen we waardeFrom 1986
. - Anders (
ELSE
) verkrijgen we de waardeBefore 1986
.
- Als (
- Met
END
beëindigen we hetCASE statement
.
De waarden uit het CASE
statement staan in een nieuwe kolom: case
.
Hiermee heb je door logica toe te passen met een SQL CASE statement een nieuwe kolom toegevoegd aan de output. Het SQL CASE statement geeft je dus een hoop mogelijkheden.
Je kunt voor de vergelijkingen de comparison operators zoals =
, >
en >=
gebruiken. Dit geeft je de vrijheid om allerlei soorten vergelijkingen te maken.
2. Een nieuwe kolom vanuit SQL CASE een naam geven met AS
We hebben gezien dat de nieuwe kolom standaard de naam case
krijgt.
Dit is niet altijd gewenst, omdat jij of een collega dan gemakkelijk vergeet welke informatie een kolom bevat.
Door gebruik te maken van AS
kun je de kolom zelf een specifieke naam geven.
Dit doen we in het volgende voorbeeld:
SELECT
name,
year,
CASE
WHEN year > 1986 THEN 'After 1986'
WHEN year = 1986 THEN 'From 1986'
ELSE 'Before 1986'
END AS year_category
FROM
movies;
name | year | year_category |
---|---|---|
Aliens | 1986 | From 1986 |
Animal House | 1978 | Before 1986 |
Apollo 13 | 1995 | After 1986 |
... | ... | ... |
Columns: 3
Rows: 36
We hebben hier na END
toegevoegd: AS year_category
.
Je ziet dat de nieuwe kolom nu de year_category
heet in plaats van case
. Over het algemeen is het aan te raden een duidelijke naam te geven aan jouw nieuwe kolom. Want misschien weet je nu nog welke informatie er in de kolom staat, maar de volgende keer dat je naar de SQL query kijkt ben je dat wellicht vergeten.
3. Gebruik van functies in combinatie met CASE
Met een CASE
statement vergelijk je scenario's.
We hebben gezien dat je hierbij comparison operators zoals =
, >
en >=
kunt gebruiken.
Om je nog meer mogelijkheden te geven kun je dit nog aanvullen met het gebruik van functies.
Dit doen we in het volgende voorbeeld:
SELECT
name,
CASE
WHEN LENGTH(name) >= 10 THEN 'Long name'
ELSE 'Short length'
END AS name_length_category
FROM
movies;
name | name_length_category |
---|---|
Aliens | Short length |
Animal House | Long name |
Apollo 13 | Short length |
... | ... |
Columns: 2
Rows: 36
- Met functie
LENGTH()
bepalen we de lengte van de naam van een film. - Afhankelijk van de lengte maken we met het
CASE
statement de nieuwe kolomname_length_category
aan.
Je ziet dat je op deze manier ingewikkeldere logica kunt toepassen om precies de informatie te tonen waar jij naar op zoek bent.
4. Gebruik van logical operators in combinatie met het SQL CASE statement
Met een vergelijk je scenario's.
Met een SQL CASE
statement je de comparison operators zoals =
, >
en >=
gebruiken.
Hierbij kun je ook de logical operators zoals AND
, OR
en IN
gebruiken.
Dit doen we in het volgende voorbeeld:
SELECT
name,
CASE
WHEN LENGTH(name) >= 10 THEN 'Long name'
WHEN (
LENGTH(name) > 5
AND LENGTH(name) < 10
) THEN 'Medium length'
ELSE 'Short length'
END AS name_length_category
FROM
movies;
name | name_length_category |
---|---|
Aliens | Medium length |
Animal House | Long name |
Apollo 13 | Medium length |
... | ... |
Columns: 2
Rows: 36
- Met functie
LENGTH()
bepalen we de lengte van de naam van een film. - Afhankelijk van de lengte maken we met het
CASE
statement de nieuwe kolomname_length_category
aan. - Met logical operator
AND
maken we categorieMedium length
, daar waar de lengte tussen de5
en10
karakters is.
Je ziet dat dit je wederom meer mogelijkheden en een hoop flexibiliteit geeft.
Samenvatting over het SQL CASE statement
- Met een
CASE
statement kun je logica toepassen.- Daarbij gebruik je ook
WHEN
,THEN
,ELSE
enEND
. - Hiermee kun je met vergelijkingen bijvoorbeeld een kolom toevoegen.
- Voor de vergelijkingen kun je comparison operators zoals
=
,>
en>=
gebruiken. - Voorbeeld van een
CASE
statement:
- Daarbij gebruik je ook
SELECT
name,
year,
CASE
WHEN year > 1986 THEN 'After 1986'
WHEN year = 1986 THEN 'From 1986'
ELSE 'Before 1986'
END
FROM
movies;
- Met
AS
kun je de nieuwe kolom een specifieke naam geven, bijvoorbeeld:
SELECT
name,
year,
CASE
WHEN year > 1986 THEN 'After 1986'
WHEN year = 1986 THEN 'From 1986'
ELSE 'Before 1986'
END AS year_category
FROM
movies;
- Je kunt functies gebruiken in vergelijkingen.
- Je kunt logical operators zoals
AND
,OR
enIN
gebruiken.
Wil je nog veel meer leren over SQL? Bekijk dan onze SQL cursus voor data analyse of download onderstaande opleidingsbrochure. In onze SQL cursus wisselen theorie en praktijkoefening elkaar steeds af. Nadat je deze training hebt gevolgd kun je zelfstandig met SQL werken. Je kunt ook altijd even contact opnemen via info@datasciencepartners.nl of 020 - 24 43 146 als je een vraag hebt.
Rik is data scientist en marketeer bij Data Science Partners. Vanuit zijn achtergrond op de Technische Universiteit Eindhoven heeft hij veel affiniteit met data. Na zijn studie heeft hij als consultant altijd met data gewerkt en tevens ervaring opgedaan in het geven van trainingen.