Shoeisha Technology Media

資格Zine(しかくジン)

記事種別から探す

集合演算子を使ったSQL文と落とし穴のORDER BY

  • LINEで送る
  • このエントリーをはてなブックマークに追加
林 優子[著]
2016/11/08 14:00

 結合は複数の問合せから求めた行を1つの行にしましたが、「集合演算子」を使うと複数の問合せから求めた列を1つの列にまとめることができます。意外と業務で使われていることが多いので、覚えておくと役に立つ日が来るでしょう。

集合演算子の種類

集合演算子は、2つの集合(問合せ結果)の間で集合演算を行う演算子です。演算は行単位で行われ、その結果は1つの集合(問合せ結果)になります。集合演算子には、表1に示す4種類があります。

表1:集合演算子の種類
集合演算子 機能 戻り値 重複行の排除 結果のソート
UNION ALL 和集合を求める 2つの集合(問合せ結果)のすべての行 しない しない
UNION 和集合を求める 2つの集合(問合せ結果)のすべての行 する する
INTERSECT 積集合を求める 2つの集合(問合せ結果)に共通する行 する する
MINUS 差集合を求める 2つの集合(問合せ結果)のうち、1つ目の集合(問合せ結果)にしかない行 する する

次の図1は、各集合演算子で得られる結果のイメージです。

図1:各集合演算子で得られる結果のイメージ
図1:各集合演算子で得られる結果のイメージ

また、集合演算子の構文は次のとおりです。集合演算子には優先順位がなく、上から順に評価されます。ただし、括弧()を使用すれば、評価の順序を変えることができます。

図2:集合演算子の構文
図2:集合演算子の構文

では、集合演算子の決まり事について、設問を解きながら解説しましょう。

問1

INTERSECT演算子について正しい記述はどれですか。

  • a. デフォルトで出力はソートされない
  • b. 重複をチェックするときにNULLは無視される
  • c. すべてのSELECT文において、列名は同じでなければならない
  • d. すべてのSELECT文において、列数は同じでなければならない
  • e. すべてのSELECT文において、列のデータ型は完全に同じでなければならない

表1で説明したとおり、デフォルトで出力はソートされないのはUNION ALLのみで、他の集合演算子はソートされます(選択肢aは不正解)。

集合演算子は、NULLも含めて重複チェックを行います。つまり、NULLは無視しません(選択肢bは不正解)。

すべてのSELECT文において、列数は同じでなければいけませんが、列名とデータ型は異なっていても構いません(選択肢dは正解、選択肢c、eは不正解)。ただし、データ型は互換性がなければいけません。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 林 優子(ハヤシ ユウコ)

    日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。

バックナンバー

連載:めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール

もっと読む

この記事もオススメ

All contents copyright © 2015-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.0