スポンサーリンク

【SQL】UNIONとEXCEPTの使い方!

記事内に広告が含まれています。

SQLでは、複数のクエリ結果を結合したり、差分を取得したりするために、UNIONEXCEPTを使用します。

これらは特に、データセットを操作して分析や集計を行う際に非常に便利です。今回は、それぞれの使い方と動作の違いを具体的な例とともに解説します。

スポンサーリンク

UNIONとは?

UNIONは、複数のクエリの結果を結合し、重複する行を除外して返す操作です。

2つ以上のSELECT文で取得した結果を1つの結果セットにまとめたい場合に使用します。

特徴

  • 重複行がある場合、自動的に1つにまとめられる。
  • 各クエリで返す列数とデータ型が一致している必要がある。
  • 結果の並び順は保証されないため、必要に応じてORDER BY句を追加することが推奨されます。

UNIONの基本的な使用法

まず、2つのテーブルを考えます。

employees テーブル

first_namelast_namedepartment
JohnDoeSales
JaneSmithHR
MichaelBrownIT

managers テーブル

first_namelast_name
JohnDoe
SarahConnor

以下のクエリで、両テーブルに含まれる従業員とマネージャーの名前を1つのリストにまとめます。

SELECT first_name, last_name FROM employees
UNION
SELECT first_name, last_name FROM managers;

出力例

first_namelast_name
JohnDoe
JaneSmith
MichaelBrown
SarahConnor

John Doe は両方のテーブルに存在しますが、UNIONによって重複が排除され、1度だけ表示されます。

UNION ALLの使用法

UNION ALLは、重複を除外せず、全ての結果をそのまま返す点でUNIONと異なります。

重複行を含めたい場合に使用します。

SELECT first_name, last_name FROM employees
UNION ALL
SELECT first_name, last_name FROM managers;

出力例

first_namelast_name
JohnDoe
JaneSmith
MichaelBrown
JohnDoe
SarahConnor

この場合、John Doeは2度表示されます。

UNION ALLでは、重複行もそのまま返されるため、全てのデータが保持されます。

スポンサーリンク

EXCEPTとは?

EXCEPTは、2つのクエリ結果のうち、最初のクエリに含まれるが、2つ目のクエリには含まれない行を返します。

これは、片方にのみ存在するデータを見つけたい場合に役立ちます。

特徴

  • 最初のクエリの結果から、2つ目のクエリの結果を除外します。
  • 各クエリで返す列数とデータ型が一致している必要があります。
  • 両方のクエリ結果の重複行を除外した上で差分を取得します。

EXCEPTの使用法

先ほどと同じemployeesテーブルとmanagersテーブルを使用します。

SELECT first_name, last_name FROM employees
EXCEPT
SELECT first_name, last_name FROM managers;

このクエリは、employeesに存在するが、managersには存在しない従業員の名前を返します。

出力例

first_namelast_name
JaneSmith
MichaelBrown

John Doeは両方のテーブルに存在するため、EXCEPTによって除外されます。結果として、マネージャーではない従業員がリストアップされます。

UNIONとEXCEPTの使い分け

これまでの説明をまとめると、以下のように使い分けられます。

操作動作
UNION複数のクエリ結果を結合し、重複を排除した結果を返す
UNION ALL複数のクエリ結果を結合し、重複を含む全ての行を返す
EXCEPT最初のクエリ結果から、2番目のクエリ結果を引いた結果を返す。つまり、片方にのみ存在する行を返す

まとめ

SQLのUNIONEXCEPTは、データを結合したり差分を取得したりするための構文です。特に複数のテーブルからデータを取り出して集約したり、不要なデータを排除する処理において非常に有効です。

スポンサーリンク
SQL
著者SNS
タイトルとURLをコピーしました