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

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で実現できます。

  1. 「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

  2. MySQLでテーブルを結合(JOIN)してデータベースから値を取得する方法

    MySQLで複数のテーブルに分けて保存されているデータをまとめて取得したい場合は、JOIN(結合)を使用します。JOINとは、テーブル同士で共通となるキー(カラム)を基準に、複数のテーブルのレコードを関連付けて1つの結果セットとして取得できる仕組みです。本記事では、実際に2つのテーブルを作成し、JOINを使って値をフェッチする手順を具体的なSQL文とともに解説します。 1つ目のテーブル「demo52」を作成する まず、ユーザーのIDと名前を管理するテーブル「demo52」を作成します。「id」にはPRIMARY KEY(主キー)を設定します。 mysql> CREATE TABLE `