u16suzuの blog

u16suzu のブログです。

outer join を使ってみる

テストデータ

# 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の向きがある.