Existem duas opções bastante simples.
Você pode participar duas vezes com a tabela de venda, uma vez por item. Se você pular o
DISTINCT
, você pode obter valores duplicados se a loja vender mais de um martelo ou termômetro. SELECT DISTINCT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode AND s1.product='hammer'
JOIN sale s2 ON s.shopcode = s2.shopcode AND s2.product='thermometer';
...ou você pode encontrar todas as correspondências com martelo ou termômetro e contar quantos valores distintos existem. Se houver dois valores possíveis e você obtiver ambos, está pronto.
SELECT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode
WHERE s1.product IN('hammer','thermometer')
GROUP BY s.shopname
HAVING COUNT(DISTINCT s1.product)=2;
Um SQLfiddle para testar ambos .