SQLのUNIONとUNION ALLのサンプルです。
目次
UNION(重複行を出力しない)
| select文 union select文 |
- 複数のselect文の結果を結合して表示します。
- 重複行は出力されません。
- 重複行を除く処理を行う分、負荷になります。重複行を除く必要がない場合は、union allを使用します。
- 表示される項目名(ヘッダの部分)は、最初に記述したSQL文のselect句の項目名になります。
- 最初のselect文と後のselect文のselect句のカラム数は同じである必要があります。
テストデータ
次の2つのテーブルがあるとします。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
| user_cd | item_no |
|---|---|
| 1 | A001 |
| 1 | B001 |
| 99 | D001 |
SQL文
上記テーブルに対してunionを使用してデータを抽出します
SELECT user_id,name FROM users
union
SELECT user_cd,item_no FROM sales;
2行目は、unionです。
結果
結果は、以下のとおりです。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
| 1 | A001 |
| 1 | B001 |
| 99 | D001 |
上記2つのテーブルの行が表示されます。
UNION ALL (重複行を出力する)
| select文 union all select文 |
- 複数のselect文の結果を結合して表示します。
- 重複行も出力します。
説明用のデータ
例として次のテーブルがあるとします。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
SQL文
上記テーブルに対してunion allを使用してデータを抽出します
SELECT * FROM users
union all
SELECT * FROM users;
2行目は、union allです。
結果
結果は、以下のとおりです。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
| 1 | 鈴木 |
| 2 | 田中 |
重複して抽出されます。
unionにallをつけない場合
unionにallをつけない場合は、重複行を出力しません。
SELECT * FROM users
union
SELECT * FROM users;
結果は、以下のとおりです。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
関連の記事
SQL INSERT文のサンプル
SQL UPDATE文とDELETE文のサンプル
SQL 重複行を表示しないサンプル(distinct)
SQL 複数の行をまとめる(集約関数/group by/having)
SQL 外部結合のサンプル(left outer join/right outer join)
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL 内部結合のサンプル(inner join)
SQL 相関副問合せのサンプル