この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
joinとは
joinは、データベースの検索時に複数のテーブルをまとめて、検索を行うsql文です。joinには、内部結合と外部結合の2種類の方法が存在します。これらの説明は、次のセクションで行います。
内部結合(inner join)
内部結合は、複数のテーブルを結合するときに指定する条件式に当てはまるデータのみ取得します。sqlは以下のように書きます。また、inner join
をjoin
と省略することもできます。select * from テーブルA inner join テーブルB on 条件式
内部結合の結果がどこを表しているのか分かりやすく説明する為に、数学の集合を図で表現するベン図を用いて説明します。先ほども説明しましたが内部結合は、テーブルAとテーブルBのデータを含んでいる(紐づいている)データを取得します。数学の集合で表現するとテーブルA ⋂ テーブルB
になります。
外部結合(left outer join, right outer join)
外部結合は内部結合とは違い、結合元のデータをすべて取得し、条件式に当てはまるデータに関しては、結合先のデータも取得します。ここで言う結合元
,結合先
をsql文で説明すると、テーブルAが結合元、テーブルBが結合先となります。また、left outer join
,right outer join
は、left join
,right join
に省略することができます。select * from テーブルA left outer join テーブルB on 条件式
left join
は、「結合元
のデータを全て取得し、条件式に当てはまる結合先
のデータも取得」します。
right join
は、「結合先
のデータを全て取得し、条件式に当てはまる結合元
のデータも取得」します。
まとめ
- 紐づいているデータのみ取得したい場合
- 内部結合
- データを全て取得し、関連データも取得したい場合
- 外部結合