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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
COALESCE(waarde1, waarde2 [, waarde3, ]

Coalesce retourneert het eerste niet NULL argument, of NULL als alle argumenten NULL zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

Handig om bijvoorbeeld een default waarde mee te geven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    COALESCE(roepnaam, voorletters) AS naam
FROM
    contactpersonen

If … else
Niet alle database systemen ondersteunen dit binnen een query, en er is verschil in syntax. In MySQL is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
IF(expr, alswaar, anders)

Let op, dit is de syntax binnen een query!
If … else constructies kunnen ook genest worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    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)
PHP script in nieuw venster Selecteer het PHP script
1
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

De eerste notatie is vergelijkbaar met PHP's switch.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

In de tweede notatie zou dit zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

De IF statement uit de vorige paragraaf met CASE:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.