pulpul 日本の試験

データベーススペシャリスト 概念書 · データベース

関係データベースの操作とSQL

要点と定義

関係データベースのデータ操作では、集合演算と関係演算を使って必要な行・列を組み立てます。和・共通・差の演算は、対応する列の数と型が両立する関係に適用します。直積は一方の各行と他方の各行を組み合わせるため、この和両立の条件を要しません。たとえば、列構成の異なる関係でも直積を作れます。これらは関係データベースの基本的な集合演算・関係演算です。

SQLのSELECTでは、条件に合う行を選び、必要な列を取り出し、結合して結果を作ります。等結合では結合条件を満たす行同士が組み合わされ、両方の表の列が結果に残ります。たとえば、商品表と在庫表を商品コードで結ぶと、商品コード列は両表由来の二列として残ります。これは、共通列を自動で一列にまとめる自然結合とは異なります。

LEFT OUTER JOINは、左表の行を保ち、右表に対応行がなければ右表由来の値をNULLにします。AVGなどの集約関数は通常NULLを集計対象から除くため、平均を求めるときは実値の個数で割ります。たとえば、結合後の値が12、NULL、24なら、平均は(12+24)÷2=18です。SELECT、表の結合、集合関数を組み合わせる考え方です。

集合差は、左の結果から右にも存在する行を取り除きます。親子関係を列で表す場合、子として現れるノードの集合から親として現れるノードの集合を引けば、親としては現れない子、つまりリーフ候補を得られます。NULLが親列に含まれる場合は、それを親ノードとして数えないよう扱います。

相関副問合せは、内側の問合せが外側の行の値を参照します。同じ区分に属する行だけから最小値を求め、外側の値がその最小値より大きい行を選ぶと、最小値の行は除外されます。同じ最小値の行が複数あっても、比較条件が「より大きい」なら全て除外されます。日付では古い日付ほど値が小さいという前提で、最小日付との比較を解釈します。

関係演算の商は、「指定したすべての値に対応する組合せを持つ候補」を取り出す演算です。候補属性を射影し、候補と条件側の直積から元の関係にない組を差で見つけ、そのような不足がある候補を除く形で表現できます。商は直積・射影・差の組合せで表せます。

適用条件と例

以下のSQLの説明は、一般的なSQLのNULLと集約関数の扱いを前提にします。細かな構文や型の扱いにはSQL方言による違いがあり得るため、実際の環境では利用するDBMSの仕様も確認します。集合演算を使う前には、対応列の数と型が両立するかを確認します。直積にはその条件は要りません。

たとえば、社員と研修受講の表を社員番号で等結合すると、受講記録が複数ある社員は記録数だけ結果に現れます。結合結果の行数を考えるときは、社員数だけでなく、結合条件に合う行の組合せを数えます。両表に社員番号列があれば、等結合結果には両方の列が残ります。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む