テーブルを内部結合するには「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」コマンドでテーブルを内部結合することができる。