Możesz to wszystko uzyskać w jednym zapytaniu za pomocą prostego sprzężenia, np.:
SELECT d.name AS 'department', p.name AS 'name'
FROM department d
LEFT JOIN people p ON p.department_id = d.id
ORDER BY department
Zwraca to wszystkie dane, ale jest to trochę uciążliwe, ponieważ i tak będziesz musiał przejść przez każdą osobę. Możesz pójść dalej i pogrupować je razem:
SELECT d.name AS 'department',
GROUP_CONCAT(p.name SEPARATOR ', ') AS 'name'
FROM department d
LEFT JOIN people p ON p.department_id = d.id
GROUP BY department
Jako wynik otrzymasz coś takiego:
department | name
-----------|----------------
sales | Tom, Bill, Rachel
marketing | Jessica, John