MySQLで列を行に変換して結合する方法:UNION ALLの使い方
MySQLで複数の列のデータを1つの列に縦方向(行)へ結合したい場合は、UNION ALLを使用します。UNION ALLは複数のSELECT文の結果をそのまま連結する演算子のため、重複を排除することなくすべての行を取得できるのが特徴です。
基本構文
select yourColumnName1 from yourTableName
union all
select yourColumnName2 from yourTableName;
それでは、実際にサンプルテーブルを作成し、動作を確認していきましょう。
テーブルの作成
mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.88 sec)
レコードの挿入
INSERTコマンドを使って、テーブルにデータを追加します。
mysql> insert into DemoTable values(100,200);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(500,600);
Query OK, 1 row affected (0.18 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100 | 200 |
| 500 | 600 |
+--------+--------+
2 rows in set (0.00 sec)
列を行に結合するクエリ
Value1とValue2という2つの列を1つの列として縦に結合するには、次のようにUNION ALLを使います。
mysql> select Value1 from DemoTable
-> union all
-> select Value2 from DemoTable;
実行結果は以下の通りです。それぞれの列の値が行として縦方向に並んでいることが確認できます。
+--------+
| Value1 |
+--------+
| 100 |
| 500 |
| 200 |
| 600 |
+--------+
4 rows in set (0.00 sec)
補足:UNIONとUNION ALLの違い
UNION ALLは重複行もそのまま結果に含めますが、UNIONを使用した場合は重複行が自動的に削除されます。今回のように単純に列を縦方向へ連結したい場合や、処理速度を重視したい場合は、重複チェックを行わないUNION ALLの利用が推奨されます。
-
MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法
MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&
-
MySQLでAUTO_INCREMENT列を扱う方法を徹底解説
MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName ( id MEDIUMINT NOT NULL AUTO_INCREMENT,