関係データの操作とSQL
要点と定義
関係演算は、関係から行や列を取り出したり、複数の関係を組み合わせたりする操作です。選択は条件に合う行を選び、射影は必要な属性を選び、結合は対応する値を手掛かりに関係を組み合わせます。集合演算の差は、左の集合から右の集合に含まれる要素を除きます。差の左右を入れ替えると結果が変わるため、どちらを基準にするかを確認します。
射影では、属性の部分集合それぞれが異なる選択肢になります。属性を一つずつ含めるかどうか決めるため、属性が四つなら、途中計算は 2×2×2×2=16 通りです。全属性を含む場合や属性を含まない場合も数えるなら、それぞれ部分集合の一つとして扱います。
結合の実装例である入れ子ループ法では、一方の関係の各行について、もう一方の関係を順に調べます。二つの関係の行数がそれぞれ n で、各組の比較にかかる時間を一定とする前提では、比較の規模は n×n になります。この見積りはこの実装例と前提に限られ、あらゆる結合方式に当てはまるわけではありません。
SELECT 文は、条件による行の絞り込み、表の結合、集約やグループ化などを組み合わせて必要な結果を求めます。例えば、ある時点の残高を求めるには、期首の値に対象日までの増減を加える考え方を使えます。表同士を正しいキーで結び、対象日や対象科目を絞ることで、関係する行の金額を集めます。
グループごとに条件に合う行を数える方法の一つは、条件に合うときだけ値を返す式と集約関数を組み合わせることです。COUNT は NULL 以外を数えるため、条件に合わない行を NULL とすれば、その行は数に入りません。非該当行に 0 を返す場合は、0 も値として数える点に注意します。
SQLでは、NULL を含む比較の結果が真または偽ではなく、不定になることがあります。三値論理では、OR の結果は真が一つでもあれば真、すべて偽なら偽で、それ以外の場合は不定になり得ます。NULL はゼロや空文字と同じ値ではありません。
相関副問合せは、外側の問合せの行を内側の問合せから参照します。例えば、各社員の属性に対応する最小日付を内側で求めるなら、外側の行と同じグループの行に絞ってから集約し、その値を外側の行と比較します。グループを結ぶ相関条件を欠くと、別のグループの値との比較になります。
導出表は、表への問合せによって得られ、表として扱われる結果です。ビューは導出表の一形態であり、名前を付けて利用できます。実表と問合せ結果を区別し、結果がどのデータに基づくかを把握します。
この節の続き
- 適用条件と例
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む