【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;