【SQL初級編8】OUTER JOINで外部結合を行う方法を理解しよう

SQL入門

本記事では、OUTER JOINについて解説します。

前回はINNER JOINについて解説しました。

今回では、LEFT JOINやRIGHT JOINなどの外部結合についてみていきましょう。

SQLのOUTER JOINとは?

OUTER JOINとは、外部結合を行うもののことです。

INNER JOIN(内部結合)では、結合時に一致しないデータが存在した場合、そのデータは表示しませんでした。

外部結合の場合は、一致しないデータがあっても、「NULL」を使って表示させます。

そのため、一致しないデータも含めて全て取得したい場合は、OUTER JOINを使います。

SQLのOUTER JOINの使い方

OUTER JOINの具体的な使い方についてみていきましょう。

次の項目に従って解説していきます。

  • LEFT JOINで結合する
  • RIGHT JOINで結合する

OUTER JOIN(外部結合)には大きく分けて、「LEFT JOIN」と「RIGHT JOIN」があります。

これら2つの違いを詳しく解説しましょう。

なお、本記事では『SQL初級編7』で作成したテーブルを利用します。『SQL入門編7』で演習用のテーブルを作っていない方は、【SQL初級編7】INNER JOINで内部結合を行う方法を理解しようを読んで予め作成してくださいね。

LEFT JOINで結合する

まず、OUTER JOINの中でも、LEFT JOINの使い方を解説します。

OUTER JOINとは、一致しないデータがあっても表示させるものです。

その中でも、LEFT JOINは、左のテーブルの方を全て表示させるものです。

具体例をみていきましょう。

○コード例

SELECT * FROM TEST2.Student LEFT JOIN TEST2.From ON from_id = From.id;

○実行結果

上記のSQL文は、StudentテーブルとFromテーブルをLEFT JOINで結合しています。

左のテーブル(Studentテーブル)のデータは全て表示させています。

ただしfrom_idが「4」のレコードには「NULL」が入っていますね。

これは、FROMテーブルにid=4のレコードがないためです。

このようにLEFT JOINでは、レコードがない場合、「NULL」を使って無理やり表示させます。

RIGHT JOINで結合する

RIGHT JOINはLEFT JOINとは逆に、右のテーブルの方を全て表示させるものです。

○コード例

SELECT * FROM TEST2.From RIGHT JOIN TEST2.Student ON From.id =from_id;

○実行結果

上記のコードは、FromテーブルにStudentテーブルを結合させています。

右のテーブル(Studentテーブル)は全てデータを表示させています。

ただし、idが「4」のレコードはFromテーブルにはないため、「NULL」が表示されています。

このようにRIGHT JOINは右のテーブルのみ全表示させます。

JOINについてのまとめ

ここまでJOINの種類を2つ解説しました。

  • INNER JOIN:一致しないデータは取得しない
  • OUTER JOIN:一致しないデータも取得する
    • LEFT JOIN:左のテーブルは全て表示する
    • RIGHT JOIN:右のテーブルは全て表示する

JOINは大きく「INNER JOIN(内部結合)」と「OUTER JOIN(外部結合)」に分けられます。

そして「OUTER JOIN」には、「LEFT JOIN」と「RIGHT JOIN」の2種類があるという訳です。

これらはそれぞれ仕様が異なるので、それぞれの違いを頭に入れておきましょう。

3つのテーブルを結合させる方法

ここからは3つのテーブルを結合させる方法を解説します。

3つ以上を結合させる場合もJOINを使って行います。

新しくテーブルを作成する

現在TEST2のデータベースには2つしかテーブルがないので、新しくテーブルを作りましょう。

下記のSQL文を実行し、TEST2のデータベースにClassテーブルを作り、データを入れてください。

○コード例

CREATE TABLE TEST2.Class(id int, teacher varchar(255));
INSERT INTO TEST2.Class(id, teacher)VALUES(1,"木村");
INSERT INTO TEST2.Class(id, teacher)VALUES(2,"近藤");
INSERT INTO TEST2.Class(id, teacher)VALUES(3,"桐山");
INSERT INTO TEST2.Class(id, teacher)VALUES(4,"高崎");
idteacher
1木村
2近藤
3桐山
4高崎

3つのテーブルを結合させる

3つのテーブルを結合させる方法を解説します。

3つのテーブルを結合させる場合は、JOINを2回使えば良いです。

○コード例

SELECT name,syussin,teacher FROM TEST2.Student JOIN TEST2.From ON from_id = From.id JOIN TEST2.CLASS ON class_id = CLASS.id;

○実行結果

上記のコードでは、JOINを2回使ってStudentテーブルとFromテーブル、そしてClassテーブルを結合させています。

このようにJOINを使えば3つ以上のテーブルも結合可能です。

まとめ

本記事では、OUTER JOINついて解説しました。

LEFT JOINやRIGHT JOINを使うと結果がどう変わるのかが、お分かり頂けたかと思います。

これでJOINの基礎は一通り理解できたことになります。

次回は、CASE式を解説していきます。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
SQL入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました