SQL UNIONとUNION ALLのサンプル(結合して抽出)

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つのテーブルがあるとします。

employeeテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
employee_beforeテーブル
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つのテーブルがあるとします。

employeeテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
employee_beforeテーブル
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 相関副問合せのサンプル(相関サブクエリ)

△上に戻る