Eri vicino
SELECT order_id
FROM orders
WHERE product_id in (222,555)
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) = 2
Per quanto riguarda la tua domanda "per curiosità" in algebra relazionale, ciò si ottiene semplicemente con division . AFAIK nessun RDBMS ha implementato alcuna estensione che lo renda semplice in SQL.