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つのリストとして統合・ソートできます。レポート作成やデータ集計など、さまざまな場面で役立つテクニックなので、ぜひ活用してみてください。
-
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
-
MySQLで条件に応じて同じ列の2つの値を連結する方法
MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869 ( Id int, &nb