FROM 句 / JOIN

構文

# 1テーブル
FROM
  テーブル名 テーブル名のエイリアス

# INNER JOINする場合
FROM
  テーブル名 a
  INNER JOIN テーブル名 b ON a.xxx_id = b.xxx_id

# 一時テーブル作成とINNER JOINする場合
FROM
  (
    SELECT
      ...
    FROM
      テーブル名
    GROUP BY
      xxx_id
  ) c
  INNER JOIN
    テーブル名 d ON c.customer_id = d.customer_id
  ...

INNER JOIN

INNER JOINする順番

メインとなるテーブル or データの多いテーブルから書いていく
※OUTER JOINする際にはRIGHT OUTER JOINではなく、LEFT OUTER JOINを使う

集計するテーブルがある場合は集計対象テーブルから書いていくことでSQLがシンプルになる
※ユーザー毎の合計支払額と合計支払い数の集計の場合はcustomerではなく、paymentの一時テーブルから

INNER JOINは共に存在するレコードだけに絞り込まれる

一時テーブルをINNER JOINする際の注意点

一時テーブル作成のサブクエリがまず実行されるため、外側のクエリに依存(相関サブクエリに)できない
一時テーブルは外側のクエリの実行が完了するまでメモリに保持される

OUTER JOIN

いつ使うか

SELECTするカラムにnullやSELECTする集計関数の結果が0になるものも取得したい場合

注意点

テーブルA LEFT OUTER JOIN テーブルB ON テーブルA.id = テーブルB.id
※テーブルB RIGHT OUTER JOIN テーブルA ON テーブルB.id = テーブルA.idは使わない