MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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などの外部結合も使いこなせるようになると、より柔軟なデータ取得が可能になりますので、ぜひあわせて覚えておきましょう。

  1. MySQLでデータベース内のテーブル名一覧を取得する方法

    MySQLでデータベースに存在するテーブル名の一覧を取得したい場合は、SHOW TABLESステートメントを使用します。SQLクライアントやコマンドラインから手軽に実行でき、指定したデータベース内の全テーブルを簡単に確認できます。基本構文テーブル名を取得するための基本構文は以下のとおりです。show tables from yourDatabaseName;yourDatabaseName の部分に、対象となるデータベース名を指定してください。実行例それでは、サンプルデータベース「hb_student_tracker」に対して実際にクエリを実行し、テーブル名を取得してみましょう。mysql&g

  2. MySQLでランダムなレコードを取得する方法|ORDER BY RAND()の使い方を解説

    MySQLデータベースからランダムにレコードを1件(または複数件)取得したい場合、ORDER BY RAND() と LIMIT を組み合わせるのが最もシンプルな方法です。この記事では、実際のテーブル作成からランダム抽出までの手順を、実行例とともにわかりやすく解説します。1. サンプルテーブルを作成するまずは動作確認用のテーブルを作成しましょう。ここでは学生情報を管理するテーブルを定義します。mysql> create table DemoTable1581    -> (    -> Stude