Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【SQL】結合についてざっくりまとめてみた

目次

背景

結合のSQLがパッと書けなかったので、記事にまとめようと思います。

結合とは

結合とは、複数のテーブルを組み合わせる処理のことです。あるテーブルの外部キーに紐づくレコードを取得したい場合などに、結合を使用します。結合によって新たなテーブルができているとイメージすると、理解しやすいです(実際にテーブルができるわけではない)。

内部結合と外部結合の違い

結合には大きく分けて、内部結合と外部結合の2種類が存在します。 内部結合は、2つのテーブルの両方にデータが存在する場合にレコード同士を結合します。

外部結合では、内部結合のような結合をしつつ、メインで指定したテーブルのデータはすべて表示します。そのため、メインのテーブルにしか存在しないデータのレコードは、カラムにNULLが入ったレコードと結合することになります。

元のテーブルにない情報をテーブルの外部から持ってくるという意味で、外部結合と呼ばれています。内部結合はテーブルの内部だけから情報を持ってくる結合なので、内部結合と呼ばれています。

多くの場合、内部結合を使うことが多いでしょう。次に左外部結合が使われます。

外部結合の種類について

外部結合には以下の3種類が存在します。この3種類の総称が外部結合です。

  • 左外部結合(LEFT OUTER JOIN)
  • 右外部結合(RIGHT OUTER JOIN)
  • 完全外部結合(FULL OUTER JOIN)

多くの場合、左外部結合と右外部結合を利用するので、その2つに絞って話を進めます。左外部結合の場合、FROM句でLEFTの左側に書いたテーブルをメインのテーブルとします。右外部結合の場合、RIGHTの右側のテーブルをメインのテーブルとします。

内部結合の構文

内部結合をする場合、FROM句にINNER JOINを書きます。INNER JOINの左側に指定したテーブルと右側に指定したテーブルを結合します。そして、ON句に結合条件を書きます。この結合条件で、2つのテーブルを結びつける列(結合キー)を指定します。

/* 内部結合 */
SELECT S.name, P.name, P.price
FROM Stores AS S
INNER JOIN Products AS P
ON S.product_id = P.id;

外部結合の構文

外部結合の場合、INNER JOINではなく、LEFT OUTER JOINやRIGHT OUTER JOINを書きます。

/* 左外部結合 */
/* Storesをメインのテーブルとする */
SELECT S.name, P.name, P.price
FROM Stores AS S
LEFT OUTER JOIN Products AS P
ON S.product_id = P.id;
/* 右外部結合 */
/* Productsをメインのテーブルとする */
SELECT S.name, P.name, P.price
FROM Stores AS S
RIGHT OUTER JOIN Products AS P
ON S.product_id = P.id;

参考記事

SELECT (SQL) - Wikipedia

外部結合とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典