Tá úloha sa mi nezdá celkom jednoznačne zadaná, ale ak chceš vybrať všetkých zákazníkov, ktorí si rezervovali iba zelené lode, tak môžeš použiť niečo takéto:
SELECT id_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l
GROUP BY id_z
HAVING SUM(CASE barva WHEN 'zelena' THEN 0 ELSE 1 END)=0
prípadne:SELECT DISTINCT id_z FROM rezervace
WHERE id_z NOT IN (
SELECT id_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l
WHERE barva<>'zelena'
)
Alebo ak chceš vybrať zákazníkov, ktorí si rezervovali všetky dostupné lode zelenej farby, tak napr. takto:
SELECT id_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l
GROUP BY id_z, barva
HAVING barva='zelena' AND COUNT(*)=(SELECT COUNT(*) FROM lod WHERE barva='zelena')
Edit: Tie selecty v príspevkoch nado mnou vyberú zákazníkov, ktorí si rezervovali aspoň jednu zelenú loď (nie všetky).