【MySQL】テーブルを内部結合する(inner join の使い方)

テーブルを内部結合するには「INNER JOIN」を使います。

ここでは MySQLコマンド「INNER JOIN」の具体的な使い方を解説していきます。

メモ

テーブルの結合方法の種類について詳しくはこちら

 

内部結合とは?

内部結合は、指定したカラムの値が一致するデータのみを結合して取得する方法です。

 

以下は商品IDを使って内部結合する例。

「users」テーブルと「items」テーブルの商品IDが一致しているデータが結合され、ひとつの行で取得できます。

 

このとき「users」テーブルにある商品IDが 5 (ユーザー名: 田中)のデータは、「items」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。

また同様にして、「items」テーブルにある商品IDが 1 (商品名: パン)や 4 (商品名: )のデータは、「users」テーブルの商品IDカラムの値に存在しないので、結果には表示されません。

 

この内部結合をコマンドで行うときは「INNER JOIN」を使います。

 

「INNER JOIN」の基本

「INNER JOIN」は、「SELECT」などと組み合わせて使います。

以下のコマンドで、テーブル1とテーブル2を内部結合することができます。

ON のあとには、テーブル同士を結合するためのカラム名を指定します。

SELECT * FROM テーブル1の名前 INNER JOIN テーブル2の名前 ON テーブル1のカラム名 = テーブル2のカラム名;
メモ

SELECT 文の詳しい使い方はこちら

 

テーブルを内部結合する

実際にMySQLサーバーに接続し、テーブルを内部結合してみましょう。

 

あらかじめ「shopping」データベースの「users」テーブルには、購入ユーザー名と買った商品ID、「items」テーブルには商品IDと その商品名や価格が保存されている例で進めていきます。

具体的なデータは以下。

「users」テーブル

name item_id
山田 2
鈴木 3
佐藤 2
田中 5

「items」テーブル

id name price
1 パン 100
2 牛乳 200
3 チーズ 150
4 100

データを保存するコマンド例

CREATE DATABASE shopping;
USE shopping;

CREATE TABLE users (name VARCHAR(100), item_id INT);
INSERT INTO users (name, item_id) VALUES ('山田', 2);
INSERT INTO users (name, item_id) VALUES ('鈴木', 3);
INSERT INTO users (name, item_id) VALUES ('佐藤', 2);
INSERT INTO users (name, item_id) VALUES ('田中', 5);

CREATE TABLE items (id INT, name VARCHAR(100), price INT);
INSERT INTO items (id, name, price) VALUES (1, 'パン', 100);
INSERT INTO items (id, name, price) VALUES (2, '牛乳', 200);
INSERT INTO items (id, name, price) VALUES (3, 'チーズ', 150);
INSERT INTO items (id, name, price) VALUES (4, '卵', 100);
メモ

CREATE DATABASE 文の詳しい使い方はこちら

USE 文の詳しい使い方はこちら

CREATE TABLE 文の詳しい使い方はこちら

INSERT INTO 文の詳しい使い方はこちら

 

それでは「users」テーブルと「items」テーブルを内部結合してみましょう。

SELECT * FROM users INNER JOIN items ON users.item_id = items.id;
メモ

ひとつのコマンド内に複数のテーブルが出てくるとき、カラム名を指定するときは、手前にテーブル名をつけて テーブル名.カラム名 という形で記述します。

 

コマンドを実行すると、以下のように結果が表示されました。「users」テーブルと「items」テーブルが結合され、すべてのカラムの値が表示されています。

 

「SELECT」のあとに続けて、以下のように表示したいカラム名を指定することもできます。

SELECT users.name, items.name, items.price FROM users INNER JOIN items ON users.item_id = items.id;

 

コマンドを実行すると、以下のように結果が表示されました。

 

ここまでが「INNER JOIN」の基本!

理解をさらに深めたい方は以下からの内容もご覧ください。

 

3つ以上のテーブルを結合する

3つ以上のテーブルを結合したい場合は、以下のようにして さらに後ろに「INNER JOIN」の文をつなげます。

SELECT * FROM users INNER JOIN items ON users.item_id = items.id INNER JOIN items2 ON users.item_id = items2.id;

 

USINGを使った内部結合

「INNER JOIN」を行う際に、テーブル同士を結合するための両テーブルのカラム名が同じ場合は、ON の代わりに USING を使うこともできます。

「users」テーブルと「items」テーブルの「item_id」カラムを使って内部結合するコマンド例

SELECT * FROM users INNER JOIN items USING(item_id);

 

まとめ

以上、MySQLコマンド「INNER JOIN」の使い方でした!

 

ここまでの内容をまとめておきます。

  • 内部結合は、指定したカラムの値が一致するデータのみを結合して取得する方法。
  • 「INNER JOIN」コマンドでテーブルを内部結合することができる。