Vous pouvez tout obtenir en une seule requête avec une simple jointure, par exemple :
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
Cela renvoie toutes les données, mais c'est un peu pénible à consommer, car vous devrez de toute façon parcourir chaque personne. Vous pouvez aller plus loin et les regrouper :
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
Vous obtiendrez quelque chose comme ceci en sortie :
department | name
-----------|----------------
sales | Tom, Bill, Rachel
marketing | Jessica, John