Explain the difference between an inner join, left join, and outer join, and describe a scenario where you would use a self-join.