sql case statement uitleg voorbeeld

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.


Leren werken met SQL voor data analayse? Na onze 2-daagse SQL cursus kun je volledig zelfstandig werken met SQL.

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;
nameyearcase
Aliens1986From 1986
Animal House1978Before 1986
Apollo 131995After 1986
.........
Columns: 3
Rows: 36

Hier gebeurt het volgende:

  • We selecteren kolommen name en year uit tabel movies. Dit wordt gedaan met SQL SELECT.
  • We passen een CASE statement toe.
    • Als (WHEN) waarden in kolom year groter zijn dan 1986, dan (THEN) verkrijgen we waarde After 1986.
    • Als (WHEN) waarden in kolom year gelijk zijn aan 1986, dan (THEN) verkrijgen we waarde From 1986.
    • Anders (ELSE) verkrijgen we de waarde Before 1986.
  • Met END beëindigen we het CASE 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;
nameyearyear_category
Aliens1986From 1986
Animal House1978Before 1986
Apollo 131995After 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;
namename_length_category
AliensShort length
Animal HouseLong name
Apollo 13Short 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 kolom name_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;
namename_length_category
AliensMedium length
Animal HouseLong name
Apollo 13Medium 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 kolom name_length_category aan.
  • Met logical operator AND maken we categorie Medium length, daar waar de lengte tussen de 5 en 10 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 en END.
    • Hiermee kun je met vergelijkingen bijvoorbeeld een kolom toevoegen.
    • Voor de vergelijkingen kun je comparison operators zoals =, > en >= gebruiken.
    • Voorbeeld van een CASE statement:
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 en IN 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.

by: