in (x,y)
даст вам работников, которые работали по крайней мере в один из 2 дней.
В то время как здесь вы найдете тех, кто работал 2 разных дня.
group by name
having count(distinct date)=2
Всего вы получаете то, что хотите
select name
from worker,
orders
where worker.workerid = oders.workerid
and date in (x,y)
group by name
having count(distinct date)=2