Conditional staments
Conditionele statements (ook wel control flow statements genoemd) kunnen overal worden toegepast waar anders een waarde zou staan. In de praktijk is dit bijna altijd in de SELECT.
Coalesce
Syntax:
Coalesce retourneert het eerste niet NULL argument, of NULL als alle argumenten NULL zijn:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT COALESCE(NULL, NULL, NULL)
->NULL
SELECT COALESCE(1, NULL, NULL)
->1
SELECT COALESCE(NULL, 2, NULL)
->2
SELECT COALESCE(NULL, NULL, 3)
->3
->NULL
SELECT COALESCE(1, NULL, NULL)
->1
SELECT COALESCE(NULL, 2, NULL)
->2
SELECT COALESCE(NULL, NULL, 3)
->3
Handig om bijvoorbeeld een default waarde mee te geven:
If … else
Niet alle database systemen ondersteunen dit binnen een query, en er is verschil in syntax. In MySQL is dit:
Let op, dit is de syntax binnen een query!
If … else constructies kunnen ook genest worden:
Code (php)
1
2
3
4
2
3
4
SELECT
IF(home_score = away_score, 1, IF(home_score > away_score, 3, 0)) AS points
FROM
match_schedule
IF(home_score = away_score, 1, IF(home_score > away_score, 3, 0)) AS points
FROM
match_schedule
En zo kan je aardig in de nesten geraken, er bestaat een veel handigere methode in standaard SQL:
Case
Syntax:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
-- simpel
CASE expr
WHEN waarde THEN resultaat
[WHEN waarde THEN resultaat]
[ELSE resultaat]
END
-- geavanceerd
CASE
WHEN conditie THEN resultaat
[WHEN conditie THEN resultaat]
[ELSE resultaat]
END
CASE expr
WHEN waarde THEN resultaat
[WHEN waarde THEN resultaat]
[ELSE resultaat]
END
-- geavanceerd
CASE
WHEN conditie THEN resultaat
[WHEN conditie THEN resultaat]
[ELSE resultaat]
END
De eerste notatie is vergelijkbaar met PHP's switch.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
CASE status
WHEN 1 THEN 'aan'
WHEN 0 THEN 'stand-by'
ELSE 'uit'
END AS status
FROM
tabel
CASE status
WHEN 1 THEN 'aan'
WHEN 0 THEN 'stand-by'
ELSE 'uit'
END AS status
FROM
tabel
In de tweede notatie zou dit zijn:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
CASE
WHEN status=1 THEN 'aan'
WHEN status=0 THEN 'stand-by'
ELSE 'uit'
END AS status
FROM
tabel
CASE
WHEN status=1 THEN 'aan'
WHEN status=0 THEN 'stand-by'
ELSE 'uit'
END AS status
FROM
tabel
De IF statement uit de vorige paragraaf met CASE:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
CASE
WHEN home_score = away_score THEN 1
WHEN home_score > away_score THEN 3
ELSE 0
END AS points
FROM
match_schedule
CASE
WHEN home_score = away_score THEN 1
WHEN home_score > away_score THEN 3
ELSE 0
END AS points
FROM
match_schedule
Zodra een conditie waar oplevert wordt de rest overgeslagen, voldoet geen enkele conditie dan wordt de ELSE (default) waarde als resultaat geretourneerd als die gedefinieerd is, anders NULL.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Joins algemeen
- Inner en outer join
- Cross en natural join
- Joins in de praktijk (1)
- Subqueries
- Joins in de praktijk (2)
- Group by
- Group by voorbeelden
- Conditional staments
- Nog meer voorbeelden
- Nawoord