トップへ(mam-mam.net/)

MariaDB(MySQL)でUNION/UNION ALLを使って複数テーブルを垂直連結

検索:

MariaDB(MySQL)でUNION/UNION ALLを使って複数テーブルを垂直連結

UNION 又は UNION ALLを使うと複数テーブルを垂直連結(行方向に連結)することが出来ます。
UNION を使うと重複する行は削除されます。
UNION ALL を使うと重複する行は削除されません。

テスト用データベースとテーブルの作成

説明のためにテスト用データベースとテーブル構造の作成です。

-- データベース作成
CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_test;
-- テーブル作成
CREATE TABLE t_union1(id serial, name VARCHAR(20));
-- テーブルにレコードを挿入
INSERT INTO t_union1(name) values('キャベツ'),('レタス'),('人参');
-- テーブル作成
CREATE TABLE t_union2(id serial, name VARCHAR(20));
-- テーブルにレコードを挿入
INSERT INTO t_union2(name) values('キャベツ'),('ほうれん草'),('大根');

-- レコードの確認
select * from t_union1;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | キャベツ     |
|  2 | レタス       |
|  3 | 人参         |
+----+--------------+

select * from t_union2;
+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | キャベツ        |
|  2 | ほうれん草      |
|  3 | 大根            |
+----+-----------------+

UNION を使って垂直連結

UNION を使って「t_union1」と「t_union2」テーブルを垂直連結します。
UNION は重複行が削除されることに注意してください。

SELECT id,name FROM t_union1
UNION
SELECT id,name FROM t_union2;
+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | キャベツ        |
|  2 | レタス          |
|  3 | 人参            |
|  2 | ほうれん草      |
|  3 | 大根            |
+----+-----------------+

UNION ALL を使って垂直連結

UNION ALL を使って「t_union1」と「t_union2」テーブルを垂直連結します。
UNION ALL は重複行が削除されないことに注意してください。

SELECT id,name FROM t_union1
UNION ALL
SELECT id,name FROM t_union2;
+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | キャベツ        |
|  2 | レタス          |
|  3 | 人参            |
|  1 | キャベツ        |
|  2 | ほうれん草      |
|  3 | 大根            |
+----+-----------------+

応用

既存テーブルを使わずにUNION/UNION ALLを使うこともできます。

SELECT 1 AS id, 'キャベツ' AS name
UNION
SELECT 2 AS id, 'レタス' AS name
UNION
SELECT 3 AS id, '人参' AS name
UNION
SELECT 2 AS id, 'ほうれん草' AS name
UNION
SELECT 3 AS id, '大根' AS name;
+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | キャベツ        |
|  2 | レタス          |
|  3 | 人参            |
|  2 | ほうれん草      |
|  3 | 大根            |
+----+-----------------+
MariaDB(MySQL)のサンプルSQL一覧に戻る