【SQL】集合演算子を用いたデータベース操作|SELECT文での柔軟なレコード抽出・除外を実現

こんにちは、Kosei(@kay_diacc2)です!

こんな方におすすめ!
  • SELECT文を用いた検索結果のデータ加工方法が知りたい
  • 有益なレコード情報の抽出・除外が柔軟に行うために「集合演算子」の使い方をマスターしたい
目次

集合演算子とは|データベース操作

集合演算子とは、SELECT文をもとに抽出した結果表を1つのデータの集合と捉え、その結果表同士を足し合わせたり、共通部分をさらに抽出したり等の演算ができる仕組みを指します。

SQL操作では上記3つの集合演算子を利用することができます。

集合演算子のSQL基本構文

集合演算子の基本構文は下記のように示されます。1つの集合演算子を用いた場合、2つのデータの集合を1つにまとめることができます。

加えて、下記のように集合演算子を多数記述し、N個のデータ集合から成る集合体を作成することもできます。

SELECT [列1, 列2・・・]                -- 集合1
FROM   [テーブル1]
WHERE  [絞り込み条件]

[UNION / EXCEPT(MINUS) / INTERSECT]  -- 集合演算

SELECT [列1, 列2・・・]                -- 集合2
FROM   [テーブル2]
WHERE  [絞り込み条件]

[UNION / EXCEPT(MINUS) / INTERSECT]  -- 集合演算

SELECT [列1, 列2・・・]                -- 集合N
FROM   [テーブルN]
WHERE  [絞り込み条件]

集合演算子を記述する際の注意点

集合演算子を記述する上での注意点を下記に示します。

選択列リストの列数とデータ型を揃えること

集合演算子は、複数の検索結果を1つの結果表として整理するのに有効です。この結果表を作るには、選択する列数およびデータ型を合わせる必要があることに注意が必要です。選択列数やデータ型が異なっていた場合、エラーが発現します。

ORDER BY(並び替え)は最後のSELECT文に記述する

結果の並び替えを実行する場合、ORDER BYを用います。その際、ORDER BY句は最後のデータ集合のSELECT文にて記述するようにしましょう。

集合演算子の乱用は極力控える

集合演算子を用いるとシステム内部で自動的に検索結果の重複レコードチェックに伴う並び替えが実行されることがあります。この検索結果の並び替えは、一時的に大量のメモリを消費する可能性があるため、非機能要件に敏感なシステムでのSQL操作時には注意が必要です。

集合演算子を用いたSQL操作

ここからそれぞれの集合演算子について1つずつ詳しく解説していきます。

和集合|UNION

UNION演算子は、最も代表的な集合演算子です。

2つのSELECT文をUNIONで繋いた場合、それぞれの検索結果の足し合わせ表が結果として取得できます。

UNION演算子の基本構文

SELECT [列1, 列2・・・]       -- 集合1
FROM   [テーブル1]
WHERE  [絞り込み条件]
UNION                       -- 集合演算子
SELECT [列1, 列2・・・]       -- 集合2
FROM   [テーブル2]
WHERE  [絞り込み条件]

重複箇所をまとめず全ての結果を返したい場合

UNION演算子にALLを追記すると、2つの集合間での重複レコードもそのまま結果として返ってきます。

SELECT [列1, 列2・・・]       -- 集合1
FROM   [テーブル1]
WHERE  [絞り込み条件]
UNION ALL                   -- 集合演算子
SELECT [列1, 列2・・・]       -- 集合2
FROM   [テーブル2]
WHERE  [絞り込み条件]

差集合|EXCEPT(MINUS)

最初に指定したSELECT文の検索結果から、次に指定した検索結果の重複箇所を取り除いた結果を取得したい場合、EXCEPT演算子が有効です。

差集合を取るにはEXCEPT演算子を用いますが、Oracle DBでは代わりにMINUSを用います。

SELECT [列1, 列2・・・]       -- 集合1
FROM   [テーブル1]
WHERE  [絞り込み条件]
EXCEPT                      -- 集合演算子
SELECT [列1, 列2・・・]       -- 集合2
FROM   [テーブル2]
WHERE  [絞り込み条件]

差集合を求める際は、SELECT文の順番に注意が必要です。集合1の結果から集合2の結果の差が抽出されます。

積集合|INTERSECT

2つのSELECT文での検索結果に共通するレコードのみを抽出したい場合、INTERSECT演算子が有効です。

INTERSECT演算子を用いた積集合は、次のように記述します。

SELECT [列1, 列2・・・]       -- 集合1
FROM   [テーブル1]
WHERE  [絞り込み条件]
INTERSECT                   -- 集合演算子
SELECT [列1, 列2・・・]       -- 集合2
FROM   [テーブル2]
WHERE  [絞り込み条件]

データベース・SQL操作まとめ

当サイトではデータベースの設計ノウハウやSQL操作における基本構文の解説記事を多数配信しています。合わせてご覧ください。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる