テストデータ
# towns table
id name
1 アテネ
2 ヴェネチア
3 ローマ
5 ピサ
# users table
id name town_id
1 taro 1
2 jiro 2
3 saburo 3
4 shiro 4
inner join
- town_id 4 のレコードは towns tableに存在しないので表示されない
select
*
from
users AS u
join
towns AS t
on u.town_id = t.id
;
id name town_id id name
1 taro 1 1 アテネ
2 jiro 2 2 ヴェネチア
3 saburo 3 3 ローマ
left outer join
- こちらの
outer join
では town_id 4 のレコードは towns tableに存在しないので NULL になってる
select
*
from
users AS u
left outer join
towns AS t
on u.town_id = t.id
;
id name town_id id name
1 taro 1 1 アテネ
2 jiro 2 2 ヴェネチア
3 saburo 3 3 ローマ
4 shiro 4 NULL NULL
right outer join
select
*
from
users AS u
right outer join
towns AS t
on u.town_id = t.id
;
id name town_id id name
1 taro 1 1 アテネ
2 jiro 2 2 ヴェネチア
3 saburo 3 3 ローマ
NULL NULL NULL 5 ピサ
まとめ
- inner join : 片方だけに存在するレコードは表示しない
- outer join : 片方だけに存在するレコードはNULLで表示する. こちらはleft, rightの向きがある.