かっちゃんのプログラミング奮闘記

このブログは、僕がプログラミング学習をしていく上で、知識のインプットを図るためのアウトプット場所として活用している場所です。

【SQL】複数テーブル同士の結合について

今回は複数のテーブル同士の結合について学んだことをアウトプットしていきます。

リレーションシップ

他のテーブルにある行と関連付けるために、外部キーを利用してリレーションシップを構成する。(結合)

外部キーとは?

外部キーとは、関連する他テーブルのある行(主キー列など)の値を記述したもの。

例えばUserテーブルが主テーブルでPostテーブルが付随する1対多な場合、Userテーブルを参照するために、Postテーブルに外部テーブルとして、外部キーのuser_idカラムを作る。

その外部キー(user_id)の中身に参照先の主テーブルの主キー(id)を格納して紐づける。

結合

結合を使用することで、複数のテーブル同士を繋いで、互いの表の中のデータを取り出すことができる。

また、結合はテーブルをまるっと繋ぐことではなく、結合条件が満たされた時にのみ、その満たされた条件に関する行を1つ1つその場に応じて結合されていく。

JOIN句

JOINで結合する時は内部結合が行われる。
(基本的に内部結合が一番利用される)

SELECT 日付, 名前 AS 費目, メモ
  FROM 家計簿 (主テーブル)
  JOIN 費目   (結合したい別のテーブル)
    ON 家計簿.費目ID = 費目.ID

JOINで結合先のテーブルを決めたら、その結合の条件をON句で指定する。

上記の結合指示しているSQL文は、

①JOINで結合したい費目テーブルを指定  
②FROMで主テーブルである家計簿テーブルを指定  
③ON句で指定した結合条件に則って、家計簿テーブルの費目IDと費目テーブルのIDが同じなら、その一致した行だけ取り出して結合する(全てのテーブルを結合するのではなく、一致したとこだけ結合する)  

ON句

ON句が結合条件を書く時に記述するSQL

例として、下記のSQL文は家計簿テーブルの費目IDと費目テーブルのIDが同じ場合に結合するという意味の結合条件です。

ON 家計簿.費目ID = 費目.ID

INNER JOIN

INNER JOINはJOINとほぼ同じ意味で、基本的にRailsではINNER JOINSQLを発行して内部結合が行われる。

基本的にRailsではINNER JOINの方が利用される。

Railsのjoinsメソッド

このINNER JOINはRailsでいう「joins」メソッドで同じ動きをする。

joinsメソッドは、Railsでアソシエーションしてある場合に使用できる。(belong_toとかで紐付けを先に定義しておく)

pikawaka.com