I suppose you're talking about explicit joins. As you have it, the joins are simply implicit. You'd do it like this:
SELECT fund.fundname, sum(shares) as tt, (sum(shares)*price.price) as value
FROM trans
JOIN fund
ON ( trans.fundid = fund.fundid )
JOIN customer
ON ( trans.sin = customer.sin )
JOIN price
ON ( price.fundid = trans.fundid )
WHERE trans.transdate = '2009-1-1'
AND price.pricedate = trans.transdate
AND customer.name = 'Jacob'
GROUP BY fund.fundname, price.price;
Postgresql also allows a nifty shorthand with USING
which will only include one copy of the column in the end result set:
SELECT fundname, sum(shares) as tt, (sum(shares)*price.price) as value
FROM trans
JOIN fund
USING ( fundid )
JOIN customer
USING ( sin )
JOIN price
USING ( fundid )
WHERE trans.transdate = '2009-1-1'
AND price.pricedate = trans.transdate
AND customer.name = 'Jacob'
GROUP BY fund.fundname, price.price;