SQLのUNIONとUNION ALLでテーブルを結合して抽出するサンプルです。
目次
サンプル | UNION (結合して全データを抽出+重複行を出力しない) |
UNION ALL (結合して全データを抽出+重複行も出力する) |
UNION (結合して全データを抽出+重複行を出力しない)
select * from テーブルA UNION select * from テーブルB |
- テーブルAで取得した行とテーブルBで取得した行を全て抽出します。ただし重複した行は出力しません。(union allとの違い)
- 重複行を除く処理を行う分、負荷になります。重複行を除く必要がない場合は、union allを使用します。
- 表示される項目名(ヘッダの部分)は、最初に記述したSQL文のselect句の項目名になります。
- 最初のselect文と後のselect文のselect句のカラム数は同じである必要があります。
- UNIONは、集合演算子です。和集合を求めます。
- unionは、結合するという意味です。
- 以下は、Oracleの集合演算子のリンクです。
https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries004.htm
以下は、unionしたときの行データのイメージです。重複する2は1行のみ出力されます。
UNIONを使用したサンプル
UNION演算子で2つのテーブルの重複行を除いて全データを抽出するサンプルです。
以下、2つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
4 | 高橋 | takahashi |
UNIONを使用したSQLを実行します。
select * from employee
UNION
select * from employee_before
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
4 | 高橋 | takahashi |
2つのテーブルのデータが表示されます。
employeeテーブルとemployee_beforeテーブルに重複する行は表示されません。
UNION ALL (結合して全データを抽出+重複行も出力する)
select * from テーブルA UNION ALL select * from テーブルB |
- テーブルAで取得した行とテーブルBで取得した行を全て抽出します。
- 重複行も出力します。(unionとの違い)
- 集合演算子で、和集合を求めます。
以下は、union allしたときの行データのイメージです。重複する2は2行出力されます。
UNION ALLを使用したサンプル
UNION ALL演算子で2つのテーブルの全データを抽出するサンプルです。
以下、2つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
4 | 高橋 | takahashi |
UNION ALLを使用したSQLを実行します。
select * from employee
UNION ALL
select * from employee_before
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2 | 田中 | tanaka |
4 | 高橋 | takahashi |
2つのテーブルのデータが表示されます。
employeeテーブルとemployee_beforeテーブルに重複する行も表示されます。
関連の記事
SQL MINUSのサンプル(差分を抽出する:Oracle)
SQL INTERSECTのサンプル(一致行を抽出する)
SQL LEFT JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL INNER JOIN 内部結合のサンプル
SQL 相関副問合せのサンプル(相関サブクエリ)