What is the best way of doing a full outer join between two tables ? That is, a query which gives you all the matching rows in A and B, all the rows in A but not B and all the rows in B but not A.

Obviously you can't do:

select a.*, b.*
from a, b
where a.key (+) = b.key (+)

Is the only option to do it as two separate queries i.e. something like

select a.*, b.*
from a, b
where a.key = b.key(+)
union
select a.*, b.*
from a, b
where a.key(+) = b.key

Or is there a neater way ?