第1部 魔法のSQL 1-7 SQLで集合演算|達人に学ぶSQL徹底指南書
1-7 SQLで集合演算
導入ー集合演算に関するいくつかの注意点
- 注意1:SQLの扱う集合は重複行を許す多重集合のため、それに対応するALLオプションが存在する
ex.) UNION ALL
集合演算は重複排除のために暗黙のソートを発生させるが、ALLオプションを付けるとソートが行われないのでパフォーマンスが向上する。
- 注意2:演算の順番に優先順位がある UNIONとEXCEPTに対して、INTERSECTのほうが先に実行される。
併用する場合、INTERSECT以外を優先的に実行したい場合は、括弧で明示的に演算の順番を指定する必要がある。
-
注意3:DBMSごとに集合演算子の実装状況にバラツキがある
-
注意4:除算の標準的な定義がない
テーブル同士のコンペアー
1. 集合の相性チェック:基本編
ALLオプションを付けなければ重複行を排除する。テーブル同士が同じなら、重複が排除されきれいに重なり合う。
2. 集合の相性チェック:応用編
INTERSECTにも冪等姓が成り立つ。
A INTERSECT B = A = B
A≠Bの場合、UNIONとINTERSECTの結果は異なり、UNIONの方が絶対に行数が多くなる。
(A UNION B) EXCEPT (A INTERSECT B)
が空集合かどうかを判定する。
差分は排他的和集合を選択すればよい。
3. 差集合で関係除算を表現する
要求される集合から引き算して、結果が空集合なら全部備えていた、と判定できる。
4. 等しい部分集合を見つける
集合の相等性を調べる方法には、冪等性か全単射を利用する2通りがある。
5. 重複行を削除する高速なクエリ
極値関数を使って残したいrowidを1つだけ取得し、その集合をテーブル算対から引き算する。
EXCEPTを使うと、補集合を簡単に表現できる。
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型