【SQL】テーブルの結合

2つのテーブルのうち、結合キーの値が一致する行同士を結合して新たなテーブルを生成する。

内部結合(INNER JOIN)

結合元のテーブルから、結合先と関連付いている行のみを抽出する。それぞれ結合先・結合元と関連づいていないレコードは検索結果から除外される。

SELECT
  series.SERIES_CD,
  SERIES_NAME_JP,
  MOVIE_CD,
  MOVIE_TITLE_JP
FROM
  movies INNER JOIN series ON movies.SERIES_CD = series.SERIES_CD;

moviesテーブルのうちseriesテーブルのレコードと関連づいているレコードだけが抽出される。

左外部結合(LEFT OUTER JOIN)

結合元のレコードは結合先と関連付いていないものも含めすべて検索結果として残る。関連付いていないレコードでは結合先由来のカラムにNULLが入る。

SELECT
  MOVIE_CD,
  MOVIE_TITLE_JP,
  series.SERIES_CD,
  SERIES_NAME_JP
FROM
  movies LEFT OUTER JOIN series ON movies.SERIES_CD = series.SERIES_CD;

moviesテーブルのレコードは全件取得される。

右外部結合(RIGHT OUTER JOIN)

結合先のレコードは結合元と関連付いていないものも含めすべて検索結果として残る。関連付いていないレコードでは結合元由来のカラムにNULLが入る。

完全外部結合(FULL OUTER JOIN)

両テーブルのレコードはすべて残る。

自己結合

1つのテーブルをあたかも複数あるかのように扱い、お互いに結合させる。同一カラムのデータ同士を組み合わせるときに用いる。

SELECT
  P1.PRODUCTNAME, P2.PRODUCTNAME
FROM
  products AS P1
  JOIN products AS P2
    ON P1.PRODUCTID < P2.PRODUCTID
WHERE (P1.PRICE + P2.PRICE) < 3200;

不等号は重複する組み合わせを除外するために用いられる。ID1 - ID2は残るが、ID2 - ID1は残らない。