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

以下は、和集合の図です。テーブルAまたはテーブルBのどちらかにあれば含まれます。

UNIONを使用したサンプル

UNION演算子で2つのテーブルの重複行を除いて全データを抽出するサンプルです。

以下、2つのテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
syain_beforeテーブル
id name romaji
2 田中 tanaka
4 高橋 takahashi

以下のSQLを実行します。

select * from syain 
UNION
select * from syain_before

2行目は、UNIONを使用しています。

結果は、以下のとおりです。

抽出結果
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
4 高橋 takahashi

2つのテーブルのデータが表示されます。
syainテーブルとsyain_beforeテーブルに重複する行は表示されません。

UNION ALL (結合して全データを抽出+重複行も出力する)

select * from テーブルA
UNION ALL
select * from テーブルB
  • テーブルAで取得した行とテーブルBで取得した行を全て抽出します。
  • 重複行も出力します。(unionとの違い)
  • 集合演算子で、和集合を求めます。

UNION ALLを使用したサンプル

UNION ALL演算子で2つのテーブルの全データを抽出するサンプルです。

以下、2つのテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
syain_beforeテーブル
id name romaji
2 田中 tanaka
4 高橋 takahashi

以下のSQLを実行します。

select * from syain 
UNION ALL
select * from syain_before

結果は、以下のとおりです。

抽出結果
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
2 田中 tanaka
4 高橋 takahashi

2つのテーブルのデータが表示されます。
syainテーブルとsyain_beforeテーブルに重複する行も表示されます。

関連の記事

SQL MINUSのサンプル(差分を抽出する:Oracle)
SQL INTERSECTのサンプル(一致行を抽出する)
SQL LEFT OUTER JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL INNER JOIN 内部結合のサンプル
SQL 相関副問合せのサンプル(相関サブクエリ)

△上に戻る