MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法
MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。
本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。
1つ目のテーブル「demo52」を作成する
まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。
mysql> CREATE TABLE `demo52` (
-> `id` INT NOT NULL,
-> `name` VARCHAR(20) NOT NULL,
-> PRIMARY KEY (`id`)
-> );
Query OK, 0 rows affected (1.19 sec)
レコードの挿入
INSERT文を使って、いくつかのレコードを追加しましょう。
mysql> insert into demo52 values(1,'John'); Query OK, 1 row affected (0.17 sec) mysql> insert into demo52 values(2,'David'); Query OK, 1 row affected (0.10 sec) mysql> insert into demo52 values(3,'Mike'); Query OK, 1 row affected (0.13 sec)
レコードの確認
SELECT文で登録内容を確認します。
mysql> select *from demo52;
実行すると、次のような結果が出力されます。
+----+-------+ | id | name | +----+-------+ | 1 | John | | 2 | David | | 3 | Mike | +----+-------+ 3 rows in set (0.00 sec)
2つ目のテーブル「demo53」を作成する
続いて、IDと年齢を管理するテーブル「demo53」を作成します。ここではFOREIGN KEY(外部キー)制約を設定し、「demo52」のid列を参照させています。これにより、両テーブル間のデータ整合性が保たれます。
mysql> CREATE TABLE `demo53` (
-> `id` INT NOT NULL,
-> `age` INT NOT NULL,
-> PRIMARY KEY (`id`),
-> CONSTRAINT `id_demo` FOREIGN KEY (`id`) REFERENCES `demo52` (`id`)
-> );
Query OK, 0 rows affected (0.57 sec)
レコードの挿入と確認
こちらも同様に、INSERT文でレコードを追加します。
mysql> insert into demo53 values(1,23); Query OK, 1 row affected (0.08 sec) mysql> insert into demo53 values(2,22); Query OK, 1 row affected (0.15 sec) mysql> insert into demo53 values(3,26); Query OK, 1 row affected (0.13 sec)
SELECT文で内容を確認すると、次のようになります。
+----+-----+ | id | age | +----+-----+ | 1 | 23 | | 2 | 22 | | 3 | 26 | +----+-----+ 3 rows in set (0.00 sec)
JOINを使ってIDから名前を取得する
両方のテーブルの準備ができたら、いよいよJOINの出番です。次のクエリでは、テーブルに別名(t1、t2)を付け、ON句で結合条件(t1.id = t2.id)を指定しています。さらにWHERE句でid=1のレコードだけを絞り込みます。
mysql> SELECT name FROM demo52 t1
-> JOIN demo53 t2
-> ON t1.id=t2.id WHERE t1.id=1;
実行結果は以下の通りです。
+------+ | name | +------+ | John | +------+ 1 row in set (0.00 sec)
まとめ
このように、JOINを使えば複数のテーブルに分散している情報を1つのクエリで結び付け、必要な値だけを効率的に取り出せます。なお、単に「JOIN」と記述した場合、デフォルトではINNER JOIN(内部結合)として動作し、結合条件に一致するレコードのみが返されます。LEFT JOINやRIGHT JOINなどの外部結合も使いこなせるようになると、より柔軟なデータ取得が可能になりますので、ぜひあわせて覚えておきましょう。
-
MySQLでデータベース内のテーブル名一覧を取得する方法
MySQLでデータベースに存在するテーブル名の一覧を取得したい場合は、SHOW TABLESステートメントを使用します。SQLクライアントやコマンドラインから手軽に実行でき、指定したデータベース内の全テーブルを簡単に確認できます。基本構文テーブル名を取得するための基本構文は以下のとおりです。show tables from yourDatabaseName;yourDatabaseName の部分に、対象となるデータベース名を指定してください。実行例それでは、サンプルデータベース「hb_student_tracker」に対して実際にクエリを実行し、テーブル名を取得してみましょう。mysql&g
-
MySQLでランダムなレコードを取得する方法|ORDER BY RAND()の使い方を解説
MySQLデータベースからランダムにレコードを1件(または複数件)取得したい場合、ORDER BY RAND() と LIMIT を組み合わせるのが最もシンプルな方法です。この記事では、実際のテーブル作成からランダム抽出までの手順を、実行例とともにわかりやすく解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。ここでは学生情報を管理するテーブルを定義します。mysql> create table DemoTable1581 -> ( -> Stude