Primeiro imagine que as 2 consultas eram apenas tabelas. Você faria isso:
select a.producer, a.firstquerycolumn, b.secondquerycolumn
from table1 a
join table2 b on b.producer = a.producer
Você pode substituir cada tabela por uma consulta (conhecida como visualização em linha):
select a.Prod, a.AnimalsBought, b.AnimalsExploration
from
( select Producers.name Prod, count(Animals.idanimal) AnimalsBought
from AnimalsBought, Animals, Producers
where (AnimalsBought.idanimal = Animals.idanimal)
and (Animals.owner = Producers.nif)
group by Producers.name
) a
join
( select Producers.name Prod, count(Animals.idanimal) AnimalsExploration
from AnimalsExploration, Animals, Producers
where (AnimalsExploration.idanimal = Animals.idanimal)
and (Animals.owner = Producers.nif)
group by Producers.name
) b
on a.Prod = b.Prod;
Pode ser necessário alterar minha "junção" para "junção externa completa" se uma consulta puder retornar dados para um produtor onde a outra não. Eu também estaria inclinado a reestruturar a consulta da seguinte forma, fazendo uma consulta principal nos Produtores externos unidos às 2 subconsultas (com os Produtores removidos):
select Producers.name Prod, a.AnimalsBought, b.AnimalsExploration
from Producers
left outer join ( select Animals.owner, count(AnimalsBought.idanimal) AnimalsBought
from AnimalsBought, Animals
where AnimalsBought.idanimal = Animals.idanimal
group by Animals.owner
) a
on a.owner = Producers.nif
left outer join ( select Animals.owner, count(Animals.idanimal) AnimalsExploration
from AnimalsExploration, Animals
where AnimalsExploration.idanimal = Animals.idanimal
group by Animals.owner
) b
on b.owner = Producers.nif;
(É desse tipo de consulta que testei o desempenho abaixo).
Em vez de encher esta resposta com informações que provavelmente não interessam ao OP, minhas notas sobre o desempenho relativo de subconsultas escalares e visualizações em linha no Oracle (solicitadas pelo PerformanceDBA) agora estão offline aqui:Notas sobre o desempenho