Webサイト制作コースのお申し込みはこちら

【SQL】JOINで複数テーブル結合!初心者でも分かる解説・体験

SQLのJOINという命令について聞いたことはあるでしょうか。この命令は、複数テーブルの結合をおこないたいときに活用できます。今回の記事では、SQLのJOINを使用して複数テーブルを結合させる方法について、わかりやすい解説とハンズオンでマスターしていきましょう。

SQLのJOINとは?

まずはSQLのJOINとは一体どのような命令なのかについて理解を進めていきましょう。先述の通り、SQLのJOINは複数のテーブルを結合させる際に利用できる命令です。言葉だけではイメージしづらいかもしれませんので、以下に例を見てみましょう。

前提として、以下のようなテーブルがあるとします。

catsテーブル

mysql> select * from cats;
+------+----------+
| name | favorite |
+------+----------+
| tama | 1        |
| kuro | 2        |
| maro | 3        |
+------+----------+
3 rows in set (0.00 sec)

favoritesテーブル

mysql> select * from favorites;
+----+-----------+
| id | hobby     |
+----+-----------+
|  1 | 散歩      |
|  2 | 食事      |
|  3 | 毛繕い    |
+----+-----------+
3 rows in set (0.00 sec)

「catsテーブル」には、nameカラムと「favoritesテーブル」のidカラムと対応するfavoriteというカラムがあります。また「favoritesテーブル」には、idとhobbyカラムがあります。「catsテーブル」のidカラムに対応する形で「favoritesテーブル」のhobbyカラムを結合させましょう。

以下がJOINを使用したステートメントです。

mysql> SELECT * FROM cats INNER JOIN favorites ON cats.favorite = favorites.id;

以下が、上記ステートメントの出力結果です。

+------+----------+----+-----------+
| name | favorite | id | hobby     |
+------+----------+----+-----------+
| tama | 1        |  1 | 散歩      |
| kuro | 2        |  2 | 食事      |
| maro | 3        |  3 | 毛繕い    |
+------+----------+----+-----------+
3 rows in set (0.00 sec)

出力結果を見ても分かる通り、「catsテーブル」のidカラムに対応する形で「favoritesテーブル」のhobbyカラムを結合させることができました。

SQL JOINの構造

上記の例で、JOINの役割がなんとなく理解できたでしょう。ここで先ほどの(INNER)JOINの構造を見てみましょう。

mysql> SELECT * FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.テーブル1の対応カラム = テーブル2.テーブル2の対応カラム;

JOINで複数テーブル結合ハンズオン!

さて、ここまでSQLにおけるJOINの使い方について簡単に解説をしてきました。次にSQLのJOINを使ったハンズオンに挑戦していきましょう。

ちなみに今回はMySQLを使用していきます。MySQLはバージョンによって動作が異なるケースもありますので、以下に今回使用したMySQLのバージョンを記しておきます。もし途中でエラーが発生した場合は、こちらも確認してみてください。

$ mysql --version
mysql  Ver 8.0.18 for osx10.15 on x86_64 (Homebrew)

準備

まずはMySQLを使用するための準備をしていきます。

MySQLのインストール・接続

まだMySQLをインストールしていない場合は、インストールしましょう。

$ brew install mysql

MySQLのインストールが終了したら、接続します。

$ sudo mysql -u root -p

データベースの作成

次にデータベースをMySQL上に作成し、使用するデータベースを指定しましょう。

mysql> CREATE DATABASE potepan;
Query OK, 1 row affected (0.00 sec)

mysql> USE potepan;

これでMySQLを使用する準備は完了しました。

テーブルの作成

まずはJOINのハンズオンに使用するテーブルを2つ作成していきましょう。

mysql> CREATE TABLE staffs (name VARCHAR(20), department_id INT);
mysql> CREATE TABLE departments (ID INT, department_name VARCHAR(20));

以下のようなテーブルが完成しました。

staffsテーブル

mysql> DESC staffs;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| name          | varchar(20) | YES  |     | NULL    |       |
| department_id | int(11)     | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

departmentsテーブル

mysql> DESC departments;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| ID              | int(11)     | YES  |     | NULL    |       |
| department_name | varchar(20) | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

レコードの挿入

先ほど作成した2つのテーブルにレコードを挿入していきましょう。

mysql> INSERT INTO staffs VALUES("田中", 3),("山田", 1),("杉下", 2),("太田", 3),("久保田", 2),("冨田",1);
mysql> INSERT INTO departments VALUES(1, "マーケティング"),(2, "広報"),(3, "総務");

これで、それぞれのテーブルは以下の状態になりました。

staffsテーブル

mysql> SELECT * FROM staffs;
+-----------+---------------+
| name      | department_id |
+-----------+---------------+
| 田中      |             3 |
| 山田      |             1 |
| 杉下      |             2 |
| 太田      |             3 |
| 久保田    |             2 |
| 冨田      |             1 |
+-----------+---------------+
6 rows in set (0.00 sec)

departmentsテーブル

mysql> SELECT * FROM departments;
+------+-----------------------+
| ID   | department_name       |
+------+-----------------------+
|    1 | マーケティング        |
|    2 | 広報                  |
|    3 | 総務                  |
+------+-----------------------+
3 rows in set (0.00 sec)

JOINで2つのテーブルを結合

いよいよJOINで2つのテーブルを結合させていきましょう。

以下のようにステートメントを出します。

mysql> SELECT * FROM staffs INNER JOIN departments ON staffs.department_id = departments.id;

以下が出力結果です。

+-----------+---------------+------+-----------------------+
| name      | department_id | ID   | department_name       |
+-----------+---------------+------+-----------------------+
| 田中      |             3 |    3 | 総務                  |
| 山田      |             1 |    1 | マーケティング        |
| 杉下      |             2 |    2 | 広報                  |
| 太田      |             3 |    3 | 総務                  |
| 久保田    |             2 |    2 | 広報                  |
| 冨田      |             1 |    1 | マーケティング        |
+-----------+---------------+------+-----------------------+
6 rows in set (0.00 sec)

上記のように、department_idに対応している「departments」テーブルのカラムが、もう1つの「staffs」テーブルへ結合しました。

まとめ

今回の記事では、SQLのJOINを使用して複数テーブルを結合させる方法についてわかりやすい解説とハンズオンでマスターすることを目指してきました。SQLのJOINの使用方法にはクセがありましたが、その時々で適した使い方ができるようになることが理想です。ぜひ、本記事のハンズオンなどをもう1度おこなってみた上で自由自在にJOINを扱えるようになりましょう!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。