本記事では、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);
id | name | from_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,"北海道");
id | syussin |
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について解説していきます。