【SQL初級編7】INNER JOINで内部結合を行う方法を理解しよう

SQL入門

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

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

今回では、INNER JIONで複数のテーブルを結合させる方法についてみていきましょう。

SQLのINNER JOINとは?

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

INNER JOINを使うことで、テーブルとテーブルを結合させることができるようになります。

結合の中でも、一致しないデータは取得しないものを、内部結合と呼びます。

演習用のテーブルを作成する

最初に演習用のテーブルを作成します。

INNER JOINは複雑なので、シンプルなテーブルを使って説明します。

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

○コード例

CREATE DATABASE TEST2;
CREATE TABLE TEST2.Student(id int, name varchar(255), from_id int,);
INSERT INTO TEST2.Student(id, name, from_id, class_id)VALUES(1,"佐藤",3,2);
INSERT INTO TEST2.Student(id, name, from_id, class_id)VALUES(2,"鈴木",1,3);
INSERT INTO TEST2.Student(id, name, from_id, class_id)VALUES(3,"高橋",2,4);
INSERT INTO TEST2.Student(id, name, from_id, class_id)VALUES(4,"田中",4,1);
idnamefrom_id
1佐藤3
2鈴木1
3高橋2
4田中4

今回はもう一つテーブルを用意します。

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

○コード例

CREATE TABLE TEST2.From(id int, syussin varchar(255));
INSERT INTO TEST2.From(id, syussin)VALUES(1,"東京");
INSERT INTO TEST2.From(id, syussin)VALUES(2,"大阪");
INSERT INTO TEST2.From(id, syussin)VALUES(3,"北海道");
idsyussin
1東京
2大阪
3北海道

以上で演習用のテーブル作成が完了しました。

SQLのINNER JOINの使い方

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

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

  • INNER JOINでテーブルを結合する
  • INNER JOINを使う場合の注意点
  • INNER JOINとWHEREを組み合わせる

INNER JOINでテーブルを結合する

INNER JOINを使って、先程作成した「Studentテーブル」と「Fromテーブル」を結合させます。

INNER JOINを使う場合は、

SELECT * FROM {テーブル名} INNER JOIN {結合したいテーブル名} ON {列名A} = {列名B}

というふうに記述します。

具体的な、JOINの書き方をみていきましょう。

○コード例

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

○実行結果

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

「ON from_id = From.id」によって、Studentテーブルのfrom_idとFromテーブルのidを紐付けています

たとえば、Studentテーブルのid=1のレコードのfrom_idは「3」です。

この場合、Fromテーブルのidが「3」であるものと紐付けられています

その結果、Studentテーブルの右にFromテーブルが付けられているという訳です。

これが、INNER JOINの基本となります。

JOINの後に「結合させるテーブル」を指定するのと、ONの後に「テーブル同士を何で紐付けるか」を指定する必要があります。

上記のSQL文はSELECTで全部を表示させていますが、一部のカラムのみ表示させるのも可能です。

○コード例

SELECT name,syussin FROM TEST2.Student INNER JOIN TEST2.From ON from_id = From.id;

○実行結果

上記のSQL文では、Studentテーブルのnameカラムと、Fromテーブルのsyussinテーブルのみ表示させています。

INNER JOINを使う場合の注意点

INNER JOINを使う場合の注意点を紹介します。

結合するテーブルに同じカラム名が存在する場合、カラム名をそのまま指定してはいけません。

どちらのテーブルのデータかSQLが判断できないからです。

そのため{テーブル名}.{カラム名}というように、テーブル名も指定する必要があります。

たとえば、以下のSQL文では「From.id」というように、どちらのテーブルか分かるようにしていますね。

○コード例

SELECT name,syussin FROM TEST2.Student INNER JOIN TEST2.From ON from_id = From.id;

テーブル名を省くと、エラーが出てしまいます

○コード例

SELECT name,syussin FROM TEST2.Student INNER JOIN TEST2.From ON from_id = id;

○実行結果

JOINを使う場合、テーブル名の指定は忘れないようにしましょう。

INNER JOINとWHEREを組み合わせる

最後にINNER JOINとWHEREの組み合わせ方を解説します。

INNER JOINでテーブルを結合させた後、結合させたテーブルに対しWHERE句で絞り込むことが可能です。

○コード例

SELECT * FROM TEST2.Student INNER JOIN TEST2.From ON from_id = From.id WHERE syussin="大阪";

○実行結果

上記のSQL文では、まずINNER JOINで2つのテーブルを結合しています。

その後に、WHERE句によってsyussinが大阪のデータのみを絞り込んでいます

このように、INNER JOINとWHERE句を組み合わせることも可能です。

INNER JOINはWHERE句の前に動くルールとなっています。

まとめ

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

INNER JOINによってテーブルを結合できることが、お分かり頂けたかと思います。

INNER JOINは最初は分かりにくいですが、慣れてくれば便利なものとわかりますよ。

次回は、OUTER JOINについて解説していきます。

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

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

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