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 | 大根 | +----+-----------------+