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を使うと、補集合を簡単に表現できる。