
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 |
| ... | ... | ... |
Hier gebeurt het volgende:
- We selecteren kolommen
nameenyearuit tabelmovies. - We passen een
CASEstatement toe.- Als (
WHEN) waarden in kolomyeargroter zijn dan1986, dan (THEN) verkrijgen we waardeAfter 1986. - Als (
WHEN) waarden in kolomyeargelijk zijn aan1986, dan (THEN) verkrijgen we waardeFrom 1986. - Anders (
ELSE) verkrijgen we de waardeBefore 1986.
- Als (
- Met
ENDbeƫindigen we hetCASE 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 |
| ... | ... | ... |
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 |
| ... | ... |
- Met functie
LENGTH()bepalen we de lengte van de naam van een film. - Afhankelijk van de lengte maken we met het
CASEstatement de nieuwe kolomname_length_categoryaan.
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 |
| ... | ... |
- Met functie
LENGTH()bepalen we de lengte van de naam van een film. - Afhankelijk van de lengte maken we met het
CASEstatement de nieuwe kolomname_length_categoryaan. - Met logical operator
ANDmaken we categorieMedium length, daar waar de lengte tussen de5en10karakters is.
Samenvatting
- Met een
CASEstatement kun je logica toepassen.- Daarbij gebruik je ook
WHEN,THEN,ELSEenEND. - Hiermee kun je met vergelijkingen bijvoorbeeld een kolom toevoegen.
- Voor de vergelijkingen kun je comparison operators zoals
=,>en>=gebruiken. - Voorbeeld van een
CASEstatement:
- 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
ASkun 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,ORenINgebruiken.