Byłeś blisko
SELECT order_id
FROM orders
WHERE product_id in (222,555)
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) = 2
Jeśli chodzi o pytanie "z ciekawości" w algebrze relacyjnej, można to osiągnąć po prostu za pomocą oddzialu . AFAIK żaden RDBMS nie zaimplementował żadnego rozszerzenia, które czyni to tak prostym w SQL.