Je wilt hiervoor een outer join (en je moet person gebruiken als de "driving" tafel)
SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments"
FROM person
LEFT JOIN appointment ON person.person_id = appointment.person_id
GROUP BY person.person_id;
De reden waarom dit werkt, is dat de buitenste (linker) join NULL
zal retourneren voor diegene die geen afspraak hebben. De aggregatiefunctie count()
telt niet NULL
waarden en dus krijg je een nul.
Als je meer wilt weten over outer joins, is hier een leuke tutorial:http://sqlzoo.net/wiki/Using_Null