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

MySQLのUNIONとORDER BYを使って、異なる2つのテーブルから2つの列を表示・ソートする方法

MySQLでは、UNIONとORDER BY句を組み合わせることで、異なる2つのテーブルから取得した列を1つの結果セットとしてまとめて表示し、並べ替えることができます。この記事では、実際のサンプルコードと実行結果をもとに、その手順をわかりやすく解説します。

手順1:1つ目のテーブルを作成する

まず、Amount(金額)列を持つテーブル「DemoTable1」を作成します。

mysql> create table DemoTable1
(
    Amount int
);
Query OK, 0 rows affected (0.63 sec)

手順2:DemoTable1にデータを挿入する

INSERT文を使ってレコードを追加します。

mysql> insert into DemoTable1 values(234);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1 values(567);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(134);
Query OK, 1 row affected (0.43 sec)

手順3:DemoTable1の内容を確認する

SELECT文ですべてのレコードを表示します。

mysql> select *from DemoTable1;

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

+--------+
| Amount |
+--------+
|    234 |
|    567 |
|    134 |
+--------+
3 rows in set (0.00 sec)

手順4:2つ目のテーブルを作成する

次に、Price(価格)列を持つテーブル「DemoTable2」を作成します。

mysql> create table DemoTable2
(
    Price int
);
Query OK, 0 rows affected (0.73 sec)

手順5:DemoTable2にデータを挿入する

同じようにINSERT文でレコードを追加します。

mysql> insert into DemoTable2 values(134);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable2 values(775);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2 values(121);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable2 values(882);
Query OK, 1 row affected (0.09 sec)

手順6:DemoTable2の内容を確認する

SELECT文でテーブルの中身を確認します。

mysql> select *from DemoTable2;

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

+-------+
| Price |
+-------+
|   134 |
|   775 |
|   121 |
|   882 |
+-------+
4 rows in set (0.00 sec)

UNIONとORDER BYで2つのテーブルの列をまとめて表示する

ここからが本題です。UNIONを使ってDemoTable1のAmount列とDemoTable2のPrice列を結合し、最後にORDER BYで並べ替えます。重複する値を排除するため、各SELECT文にDISTINCTを指定しています。

mysql> select distinct Amount from DemoTable1
   UNION
   select distinct Price from DemoTable2
   order by Amount;

実行結果は以下の通りです。両テーブルの値が重複なく、昇順にソートされて表示されていることがわかります。

+--------+
| Amount |
+--------+
|    121 |
|    134 |
|    234 |
|    567 |
|    775 |
|    882 |
+--------+
6 rows in set (0.00 sec)

ポイント解説

UNIONとORDER BYを組み合わせる際は、以下の点に注意しましょう。

  • UNIONで結合する各SELECT文は、同じ数の列を返す必要があります。
  • ORDER BYはクエリの最後に1回だけ記述します。
  • ORDER BYに指定する列名は、最初のSELECT文で使われている列名(この例ではAmount)を参照します。
  • 重複行を残したい場合は、UNIONの代わりにUNION ALLを使用します。

このように、UNIONとORDER BYを活用すれば、構造の異なる複数テーブルのデータを簡単に1つのリストとして統合・ソートできます。レポート作成やデータ集計など、さまざまな場面で役立つテクニックなので、ぜひ活用してみてください。

  1. MySQLで2つの異なる列を組み合わせてカスタムソートを行う方法

    MySQLで2つの列を使ったカスタムソートの実現方法MySQLでは、ORDER BY句とCASE式を組み合わせることで、複数の列に基づいた柔軟なカスタムソートが可能です。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable1610 -> ( -> Marks int, -> Name varchar(20) -> ) ;Query OK, 0 rows affected (0.51 sec)2. レコードの挿入INSERTコマンドを使ってテーブルにデータを登録します。my

  2. MySQLで条件に応じて同じ列の2つの値を連結する方法

    MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869     (     Id int,   &nb