【SQL入門】INTERSECT,EXCEPT,UNIONの違いを図解

はじめに

INTERSECT, EXCEPT, UNIONの違いを図で表現します!
複数のテーブルを扱う際に利用する上記のクエリ。
サンプルクエリも用いてご説明をいたします。

参考文献

入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

サンプルデータ

今回の解説で用いるテーブル2つです。

table①

名前 部署
田中 営業
鈴木 経理
佐藤 人事

table②

名前 部署
高橋 営業
鈴木 経理
清水 開発

INTERSECT

f:id:gotto50105010:20181206223406p:plain

INTERSECTのイメージは2つの円が重なるところ。
2つのテーブルで重複するレコードを抽出してくれます。

クエリ

SELECT
    *
FROM
    tableINTERSECT
SELECT
    *
FROM
    table

実行結果

名前 部署
鈴木 経理

2つのテーブルで重複する部分が抽出できました。

EXCEPT

f:id:gotto50105010:20181206223358p:plain

EXCEPTは、2つのテーブルの差分を抽出してくれます。

クエリ

SELECT
    *
FROM
    table①
EXCEPT
SELECT
    *
FROM
    table

EXCEPTを用いる際には、順番が重要です。
最初に書いたテーブルから2つ目に記載したテーブルを引きます。
そのため、今回の例ではtable①からtable②を引きます。

実行結果

名前 部署
田中 営業
佐藤 人事

UNION

f:id:gotto50105010:20181206223412p:plain

UNIONは、2つのテーブルで重複が発生すると、
重複を削除した上でテーブルを結合してくれます。

クエリ

SELECT
    *
FROM
    tableUNION
SELECT
    *
FROM
    table

実行結果

名前 部署
田中 営業
鈴木 経理
佐藤 人事
高橋 営業
清水 開発

実行結果は、このようになりました。
2つのテーブルで共通していた鈴木さんの重複がなくなり、 テーブルが結合されております。

UNION ALL

f:id:gotto50105010:20181206223414p:plain

UNIONとUNION ALLは異なり、
2つのテーブルで重複が発生していても、そのまま結合します。

クエリ

SELECT
    *
FROM
    tableUNION ALL
SELECT
    *
FROM
    table

実行結果

名前 部署
田中 営業
鈴木 経理
佐藤 人事
高橋 営業
鈴木 経理
清水 開発

このように鈴木さんは重複しておりますが、
重複したままデータが残っております。

ちなみに、UNIONとUNION ALLの違いに関しては、
以前の別記事に詳しく解説をしております。

よろしければそちらもご覧いただけますと嬉しいです。

まとめ

INTERSECT:重複部分のみ抽出
EXCEPT:差分を抽出
UNION:重複を除外して結合
UNION ALL:テーブルを結合

このような違いがあります。

参考文献

入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)