MySQLで2つのテーブルから共通するIDレコードを取得する方法
MySQLでは、サブクエリとIN句を組み合わせることで、2つのテーブルに共通して存在するIDのレコードを簡単に取得できます。この記事では、実際にテーブルを作成し、データを挿入して、一致するレコードを抽出するまでの手順を解説します。
1つ目のテーブルを作成する
まず、以下のクエリで1つ目のテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1
(
Id int
);
Query OK, 0 rows affected (1.26 sec)
DemoTable1にデータを挿入する
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable1 values(100); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable1 values(110); Query OK, 1 row affected (0.49 sec) mysql> insert into DemoTable1 values(4); Query OK, 1 row affected (0.44 sec) mysql> insert into DemoTable1 values(3); Query OK, 1 row affected (0.18 sec)
DemoTable1の全レコードを表示する
SELECTステートメントで、テーブル内のすべてのレコードを確認しましょう。
mysql> select *from DemoTable1;
実行すると、次のような出力が得られます。
+------+ | Id | +------+ | 100 | | 110 | | 4 | | 3 | +------+ 4 rows in set (0.00 sec)
2つ目のテーブルを作成する
続いて、IDと名前を持つ2つ目のテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2
(
Id int,
Name varchar(50)
);
Query OK, 0 rows affected (0.78 sec)
DemoTable2にデータを挿入する
こちらもINSERTコマンドでレコードを追加していきます。
mysql> insert into DemoTable2 values(4,'Chris'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(1,'David'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(110,'Adam'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable2 values(210,'Bob'); Query OK, 1 row affected (0.19 sec)
DemoTable2の全レコードを表示する
SELECTステートメントで内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+------+-------+ | Id | Name | +------+-------+ | 4 | Chris | | 1 | David | | 110 | Adam | | 210 | Bob | +------+-------+ 4 rows in set (0.00 sec)
共通するIDのレコードを取得するクエリ
それでは本題です。2つのテーブルから一致するIDのレコードを取得するには、WHERE句の中でサブクエリとIN句を使用します。DemoTable1に存在するIDと同じ値をDemoTable2が持っている場合、そのレコードだけが抽出されます。
mysql> select Id,Name from DemoTable2 where Id IN (select Id from DemoTable1);
このクエリを実行すると、次のような出力が得られます。
+------+-------+ | Id | Name | +------+-------+ | 110 | Adam | | 4 | Chris | +------+-------+ 2 rows in set (0.39 sec)
結果を見ると、DemoTable1にもDemoTable2にも存在するID(110と4)に対応するレコードのみが取得できていることがわかります。このように、サブクエリとIN句を活用すれば、複数テーブル間での共通レコードの抽出をシンプルなSQLで実現できます。
-
「UP」という同じ名前の列を持つ5つのテーブルの合計を計算するMySQLクエリ
解決方法の概要 「UP」という同じ名前の列を持つ複数のテーブルから合計値を計算するには、UNION ALLとSUM()関数を組み合わせて使用します。各テーブルごとにSUM()で合計を求め、UNION ALLでその結果を縦に連結し、最後に外側のSUM()によって全体の合計値を取得します。 サンプルテーブルの作成 まず、動作確認用に5つのテーブルを作成します。1つ目のテーブルは以下のように作成し、データを挿入します。 mysql> create table DemoTable1977 ( UP int ); Query OK, 0 rows affected (0.0
-
MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法
MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `