結合は複数の問合せから求めた行を1つの行にしましたが、「集合演算子」を使うと複数の問合せから求めた列を1つの列にまとめることができます。意外と業務で使われていることが多いので、覚えておくと役に立つ日が来るでしょう。
集合演算子の種類
集合演算子は、2つの集合(問合せ結果)の間で集合演算を行う演算子です。演算は行単位で行われ、その結果は1つの集合(問合せ結果)になります。集合演算子には、表1に示す4種類があります。
| 集合演算子 | 機能 | 戻り値 | 重複行の排除 | 結果のソート |
|---|---|---|---|---|
| UNION ALL | 和集合を求める | 2つの集合(問合せ結果)のすべての行 | しない | しない |
| UNION | 和集合を求める | 2つの集合(問合せ結果)のすべての行 | する | する |
| INTERSECT | 積集合を求める | 2つの集合(問合せ結果)に共通する行 | する | する |
| MINUS | 差集合を求める | 2つの集合(問合せ結果)のうち、1つ目の集合(問合せ結果)にしかない行 | する | する |
次の図1は、各集合演算子で得られる結果のイメージです。
また、集合演算子の構文は次のとおりです。集合演算子には優先順位がなく、上から順に評価されます。ただし、括弧()を使用すれば、評価の順序を変えることができます。
では、集合演算子の決まり事について、設問を解きながら解説しましょう。
問1
INTERSECT演算子について正しい記述はどれですか。
- a. デフォルトで出力はソートされない
- b. 重複をチェックするときにNULLは無視される
- c. すべてのSELECT文において、列名は同じでなければならない
- d. すべてのSELECT文において、列数は同じでなければならない
- e. すべてのSELECT文において、列のデータ型は完全に同じでなければならない
表1で説明したとおり、デフォルトで出力はソートされないのはUNION ALLのみで、他の集合演算子はソートされます(選択肢aは不正解)。
集合演算子は、NULLも含めて重複チェックを行います。つまり、NULLは無視しません(選択肢bは不正解)。
すべてのSELECT文において、列数は同じでなければいけませんが、列名とデータ型は異なっていても構いません(選択肢dは正解、選択肢c、eは不正解)。ただし、データ型は互換性がなければいけません。
この記事は参考になりましたか?
- めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール連載記事一覧
- この記事の著者
-
林 優子(ハヤシ ユウコ)
日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

