Ga naar inhoud

Header

Logica toepassen met CASE

Introductie

In veel programmeertalen maak je gebruik van als -> dan statements om logica toe te passen.

In programmeertalen doe je dit bijvoorbeeld als volgt:

als x > 0:
    print("De waarde is positief")
als x < 0::
    print("De waarde is negatief")
anders:
    print("De waarde is nul")

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.

Het bovenstaande voorbeeld zou in SQL dan als volgt eruit zien:

CASE
  WHEN x > 0 then "De waarde is positief"
  WHEN x < 0 then "De waarde is negatief"
  ELSE "De waarde is nul"
END




1. CASE voorbeeld

We bekijken het volgende voorbeeld:

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 en year uit tabel movies.
  • 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 met logica een nieuwe kolom toegevoegd.


Je kunt voor de vergelijkingen de comparison operators zoals =, > en >= gebruiken.




2. Een nieuwe kolom vanuit CASE een naam geven met AS

We hebben gezien dat de nieuwe kolom standaard de naam case krijgt.

Dit is niet altijd gewenst.

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.




3. Gebruik van functies in combinatie met CASE

Met een CASE statement vergelijk je scenario's.

Hierbij kun je de comparison operators zoals =, > en >= gebruiken.

Ook kun je gebruik maken 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 kolom name_length_category aan.




4. Gebruik van logical operators in combinatie met CASE

Met een vergelijk je scenario's.

Met een 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 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.




Samenvatting

  • 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.