Null

Het kan zijn dat bij een single-row subquery de subquery als resultaat NULL oplevert. Zo heeft Grant bijvoorbeeld geen department_id.

 

SELECT department_id

FROM employees

WHERE last_name = 'Grant'

 

clip0189

 

En we stellen de vraag wie er op dezelfde afdeling werken als Grant.

 

SELECT last_name

FROM employees

WHERE department_id =

    (SELECT department_id

    FROM employees

    WHERE last_name = 'Grant');

 

Dan krijg je een leeg resultaat terug. Geen enkele rij dus, maar deze melding.

 

clip0190

 

Een vergelijking met NULL levert altijd FALSE op. En als een conditie FALSE is, worden de rijen uitgesloten van het query resultaat.

 

 

Als bij een multiple-row query één van de waarden van de subquery NULL is, dan worden enkel de waarden die niet NULL zijn gebruikt.

 

Welke werknemers zijn er allemaal manager? Dat zijn de manager_id's die voorkomen in de lijst van employee_id's.

Eerst halen we alle manager_id's op. Daar zit één NULL waarde bij. King is de grootste baas en hij heeft geen manager.

 

SELECT DISTINCT manager_id

FROM employees;

 

clip0203

 

Die subquery (inner query) zetten we tussen haakjes en daar zetten we de outer query boven.

 

SELECT last_name, employee_id

FROM employees

WHERE employee_id IN

 (SELECT DISTINCT manager_id

 FROM employees);

 

clip0204

 

Het is altijd oppassen met NULLS in de subquery bij het gebruik van IN of NOT IN. Als je niet zeker weet of een NULL voor gaat komen in de subquery en er misschien een verkeerd resultaat uit volgt, kun je beter die NULL uitsluiten met een WHERE.

 

SELECT last_name, employee_id

FROM employees

WHERE employee_id IN

 (SELECT DISTINCT manager_id

 FROM employees

 WHERE manager_id IS NOT NULL);