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

【MySQL】単一クエリでUNION SELECTとIN句を組み合わせる方法

はじめに

MySQLでは、UNION SELECTIN句を単一のクエリ内で組み合わせることができます。これにより、複数のテーブルのデータを統合した上で、特定の条件に一致するレコードだけを効率的に抽出できます。本記事では、2つのテーブルを作成し、サブクエリとUNIONを活用して目的のデータを取得する手順を具体例とともに解説します。

最初のテーブルを作成する

まず、以下のコマンドでテーブル「DemoTable1」を作成します。

mysql> create table DemoTable1
    -> (
    -> StudentId int,
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (1.24 sec)

レコードの挿入

insertコマンドを使って、テーブルにレコードを追加します。

mysql> insert into DemoTable1 values(210,'Adam');
Query OK, 1 row affected (0.11 sec)

レコードの確認

selectステートメントで、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1;

実行すると、次のような出力が得られます。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       210 | Adam        |
+-----------+-------------+
1 row in set (0.00 sec)

2つ目のテーブルを作成する

続いて、2つ目のテーブル「DemoTable2」を作成します。

mysql> create table DemoTable2
    -> (
    -> StudentId int,
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (0.69 sec)

レコードの挿入

同様に、insertコマンドでレコードを追加します。

mysql> insert into DemoTable2 values(100,'Chris');
Query OK, 1 row affected (0.30 sec)

レコードの確認

selectステートメントでテーブルの内容を確認します。

mysql> select * from DemoTable2;

実行結果は以下の通りです。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       100 | Chris       |
+-----------+-------------+
1 row in set (0.00 sec)

UNION SELECTとIN句を組み合わせたクエリ

ここが本題です。以下のように、サブクエリ内でUNIONを使って2つのテーブルのデータを縦に結合し、外側のクエリでIN句を適用することで、StudentIdが「210」または「100」のレコードのみを抽出します。

mysql> select StudentName from
    -> (
    -> select StudentId,StudentName from DemoTable1
    -> UNION
    -> select StudentId,StudentName from DemoTable2
    -> ) tbl
    -> where StudentId IN(210,100);

このクエリを実行すると、次の出力が得られます。

+-------------+
| StudentName |
+-------------+
| Adam        |
| Chris       |
+-------------+
2 rows in set (0.00 sec)

まとめ

上記の例では、まずサブクエリでDemoTable1とDemoTable2のデータをUNIONによって結合し、その結果セット(別名「tbl」)に対してWHERE句とIN句を適用することで、指定したID(210と100)に一致する学生名を取得しました。この手法を活用すれば、複数のテーブルに分散しているデータでも、1つのクエリだけで柔軟に絞り込みを行うことが可能になります。なお、重複行も取得したい場合はUNIONの代わりにUNION ALLを使用するとよいでしょう。

  1. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks

  2. MySQLの単一クエリでSELECT LIKEとCHAR_LENGTH()を組み合わせて使う方法

    はじめにMySQLでは、LIKE句による部分一致検索と、CHAR_LENGTH()関数による文字数の条件指定を、1つのクエリ内で同時に組み合わせることができます。これにより、「特定の文字列を含み、かつ文字数が一定以下であるレコードだけを抽出する」といった柔軟なデータの絞り込みが可能になります。本記事では、実際にテーブルを作成し、データを挿入しながら、その具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(20) -> );Que