MySQLで複数テーブルの結果をマージする方法|JOINを使った結合手順を解説
MySQLで2つ以上のテーブルに分かれたデータを1つの結果としてまとめたい場合、JOIN(結合)を使うのが最もシンプルで効果的な方法です。この記事では、実際にテーブルを作成しながら、JOINによる結果のマージ手順をわかりやすく解説します。
マージに使用するJOINの基本構文
結果をマージするには、以下のような構文でシンプルなJOINを使用します。
SELECT aliasName1.yourColumnName1, aliasName1.yourColumnName2, ... aliasName2.yourColumnName1 FROM yourTableName1 aliasName1 ... JOIN yourTableName2 aliasName2 ON yourCondition;
各テーブルに別名(エイリアス)を付け、ON句で結合条件を指定することで、関連するレコード同士を1行にまとめて取得できます。
サンプルテーブルの作成
1つ目のテーブル(demo8)を作成
まず、idとnameカラムを持つテーブル「demo8」を作成します。
mysql> create table demo8 -> ( -> id int, -> name varchar(20) -> ); Query OK, 0 rows affected (1.77 sec)
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into demo8 values(100,'John'); Query OK, 1 row affected (0.09 sec) mysql> insert into demo8 values(101,'Mike'); Query OK, 1 row affected (0.16 sec) mysql> insert into demo8 values(102,'Bob'); Query OK, 1 row affected (0.15 sec)
SELECT文でテーブルの内容を確認してみましょう。
mysql> select *from demo8;
実行すると、次のような出力が得られます。
+------+------+ | id | name | +------+------+ | 100 | John | | 101 | Mike | | 102 | Bob | +------+------+ 3 rows in set (0.00 sec)
2つ目のテーブル(demo9)を作成
続いて、idとageカラムを持つ2つ目のテーブル「demo9」を作成します。
mysql> create table demo9 -> ( -> id int, -> age int -> ); Query OK, 0 rows affected (1.90 sec)
こちらにもINSERTコマンドでレコードを挿入します。
mysql> insert into demo9 values(100,27); Query OK, 1 row affected (0.09 sec) mysql> insert into demo9 values(101,24); Query OK, 1 row affected (0.12 sec) mysql> insert into demo9 values(102,28); Query OK, 1 row affected (0.29 sec)
SELECT文で内容を確認します。
mysql> select *from demo9;
実行結果は以下の通りです。
+------+------+ | id | age | +------+------+ | 100 | 27 | | 101 | 24 | | 102 | 28 | +------+------+ 3 rows in set (0.00 sec)
JOINで2つのテーブルの結果をマージする
準備ができたら、いよいよ2つのテーブルの結果をマージします。共通のカラムである「id」を結合条件として指定し、nameとageを1つの結果セットにまとめます。
mysql> select tbl1.id,tbl1.name,tbl2.age -> from demo8 tbl1 -> join -> demo9 tbl2 -> on tbl1.id=tbl2.id;
このクエリを実行すると、次のような出力が得られます。
+------+------+------+ | id | name | age | +------+------+------+ | 100 | John | 27 | | 101 | Mike | 24 | | 102 | Bob | 28 | +------+------+------+ 3 rows in set (0.00 sec)
まとめ
このように、MySQLではJOINとON句による結合条件を組み合わせることで、複数テーブルに分散したデータを簡単にマージできます。ポイントは以下の3つです。
- 各テーブルにエイリアス(tbl1、tbl2など)を付けて可読性を高める
- SELECT句で必要なカラムだけを明示的に指定する
- ON句で両テーブルを結び付けるキー(ここではid)を正しく指定する
内部結合(INNER JOIN)以外にも、LEFT JOINやRIGHT JOINを使い分けることで、片方のテーブルにしか存在しないデータの扱いも柔軟に制御できます。用途に応じて適切な結合方法を選択しましょう。
-
MySQLのサブクエリでIN()を使って複数の結果を返す方法をわかりやすく解説
MySQLでは、IN() 演算子をサブクエリと組み合わせることで、複数の結果を簡単に取得できます。IN()は、指定したリストやサブクエリが返す値の中に一致するものが存在するかどうかを判定するための演算子であり、条件に合致する複数行を一度に抽出する際に非常に便利です。この記事では、実際にテーブルを作成し、サブクエリでIN()を使用して複数のレコードを返す手順を順番に解説します。1. テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable1317 -> ( -> Id int NOT NULL AUTO
-
MySQLで検索結果を1行にまとめて表示する方法|GROUP_CONCAT()の使い方
MySQLでは、GROUP_CONCAT() 関数を使うことで、複数行に分かれた検索結果を1行にまとめて表示できます。この記事では、実際にテーブルを作成し、データを登録したうえで、GROUP_CONCAT() の具体的な使い方を実行例つきで解説します。 サンプルテーブルの作成 まずは動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1507 -> ( -> Name varchar(20), &nb