商品コードと商品名をもつ商品表と、売上日・商品コード・数量をもつ売上表がある。 売上表には商品名が入っていない。売上表の各行に商品名を加えた一覧を得たい。 このときに行う関係演算として、最も適切なものはどれか。
正解:エ
ア売上表から、指定した条件に合う行だけを取り出す。
誤り。選択の説明です。一つの表の中から欲しい行を絞り込む操作なので、 特定の商品や特定の期間の売上だけを見たいときには使えますが、 売上表にない商品名を持ってくることはできません。
イ売上表から、指定した列だけを取り出す。
誤り。射影の説明です。これも一つの表の中の操作で、もともとある列から 必要なものを選ぶだけです。売上表に商品名の列がない以上、 いくら列を選んでも商品名は現れません。
ウ二つの表の行を、そのまま縦に積み上げて一つにまとめる。
誤り。同じ形をした表どうしを縦につなぐ操作(和)の説明です。支店ごとの 売上表を一つにまとめるような場面で使います。行数は増えますが、 列は増えないので商品名は加わりません。
エ商品コードの値が一致する行どうしで、二つの表を横につなぐ。
正解。結合です。二つの表に共通する商品コードを手がかりに行を対応づけるので、 売上表の各行に商品表の商品名を並べた一覧が得られます。
行を絞るか、列を絞るか、表をまたぐか
関係データベースの表に対する基本の操作は三つだけです。頭の中で表を思い浮かべ、 どちらの向きに切るのかで覚えると迷いません。
- 選択 … 条件に合う行だけを取り出す(表を横向きに切る)
- 射影 … 必要な列だけを取り出す(表を縦向きに切る)
- 結合 … 二つの表を共通する項目の値でつなぎ、一つの表にする
選択と射影は「一つの表の中を絞る」操作です。もとの表に入っていない情報が、 これらの操作で新しく生まれることはありません。
今回の場面をたどる
売上表には商品コードしかなく、商品名は商品表にあります。どちらの表にも商品コード という共通の項目があるので、その値が同じ行どうしを対応づければ、売上の1行に 商品名を並べられます。これが結合です。
実際の業務では、結合で必要な表をつないだうえで、選択で期間を絞り、射影で 表示する列を選ぶ、というように三つを組み合わせて使います。組み合わせても、 それぞれの操作が担う役割は変わりません。
混同しやすい操作との違い
| 操作 | 何をするか |
|---|---|
| 選択 | 条件に合う行を取り出す |
| 射影 | 指定した列を取り出す |
| 結合 | 共通する項目の値で二つの表を横につなぐ |
| 和 | 同じ形の二つの表を縦に積み上げる |
試験では「一つの表の中で足りるか、別の表の情報が要るか」を先に判断すると、 結合かそれ以外かがすぐに分かれます。