基本情報技術者試験 平成31年度 春期 午前 問28
関係モデルの演算(結合、射影、選択、併合)についての問題。
--------------------------
平成31年度 春期 午前 問28
関係モデルにおいて表X から表Y を得る関係演算はどれか。
表X
商品番号 | 商品名 | 価格 | 数量 |
---|---|---|---|
A01 | カメラ | 13,000 | 20 |
A02 | テレビ | 58,000 | 15 |
B01 | 冷蔵庫 | 65,000 | 8 |
B05 | 洗濯機 | 48,000 | 10 |
B06 | 乾燥機 | 35,000 | 5 |
表Y
商品番号 | 数量 |
---|---|
A01 | 20 |
A02 | 15 |
B01 | 8 |
B05 | 10 |
B06 | 5 |
ア 結合(join)
イ 射影(projection)
ウ 選択(selection)
エ 併合(merge)
--------------------------
解説
関係モデルやデータベースの問題は表を描くことが面倒になる。
簡単に表の画像作れるサービスないかな。
選択肢となっている 4 つの操作を説明していく。
まずは選択肢アの結合(join)
結合(join)は 2 つの表を、同じ属性をキーにしてくっつける演算になる。
氏名 | 所属 |
---|---|
一郎 | 総務 |
次郎 | 人事 |
史郎 | 調達 |
所属 | フロア |
---|---|
調達 | 6F |
総務 | 3F |
人事 | 10F |
上の 2 つの表は同じ "所属" という属性がある。
これをキーにしてくっつけると、以下のような表が作れる。
氏名 | 所属 | フロア |
---|---|---|
一郎 | 総務 | 3F |
次郎 | 人事 | 10F |
史郎 | 調達 | 6F |
結合(join)は表の属性(列)を増やし、横に広がるような演算になる。
次に選択肢エの併合(merge)をみる。
結合(join)が横に増えるのに対して、併合(merge)は縦に増える。
氏名 | 所属 |
---|---|
一郎 | 総務 |
次郎 | 人事 |
史郎 | 調達 |
氏名 | 所属 |
---|---|
十郎 | SE |
上の 2 つの表はどちらも同じ属性の組み合わせである。
この 2 表を併合(merge)すると以下のような表になる。
氏名 | 所属 |
---|---|
一郎 | 総務 |
次郎 | 人事 |
史郎 | 調達 |
十郎 | SE |
併合(merge)は表の行を増やし、縦に広がるような演算になる。
merge は"併合" とか "合流"。join は "加わる" とか "交わる" 。
英単語の意味から覚えやすくできないかと思ったが、失敗。
横にジョイント(join)、縦にマージ(merge)とでも(無理やり)。
次に選択肢イの射影(projection)
射影(projection)は表から一部の属性(列)を抜粋する演算である。
商品番号 | 商品名 | 価格 | 数量 |
---|---|---|---|
A01 | カメラ | 13,000 | 20 |
A02 | テレビ | 58,000 | 15 |
B01 | 冷蔵庫 | 65,000 | 8 |
B05 | 洗濯機 | 48,000 | 10 |
B06 | 乾燥機 | 35,000 | 5 |
上の表から一部の属性(列)を抜粋する射影(projection)をすると以下のような表になる。
商品番号 | 数量 |
---|---|
A01 | 20 |
A02 | 15 |
B01 | 8 |
B05 | 10 |
B06 | 5 |
説明のための表が問題文の表そのものということで、この問題の答えは選択肢イの射影(projection)。
選択肢ウの選択(selection)は選択肢イの射影(projection)とは逆に、行を抜粋する演算である。
商品番号 | 商品名 | 価格 | 数量 |
---|---|---|---|
A01 | カメラ | 13,000 | 20 |
A02 | テレビ | 58,000 | 15 |
B01 | 冷蔵庫 | 65,000 | 8 |
B05 | 洗濯機 | 48,000 | 10 |
B06 | 乾燥機 | 35,000 | 5 |
上の表から、例えば数量が 15 以上の行という条件で選択(secelction)の演算をすると以下のような表になる。
商品番号 | 商品名 | 価格 | 数量 |
---|---|---|---|
A01 | カメラ | 13,000 | 20 |
A02 | テレビ | 58,000 | 15 |
SQL 文だと射影(projection)も選択(selection)も select 文で書ける。
上の例の射影(projection)の演算を SQL 文で書くと以下のようになる。
select 商品番号、数量 from 表X
上の例の選択(selection)の演算をSQL文で書くと以下のようになる。
select * from 表X where 数量 >= 15
"数量 >= 15" の書き方はシェルスクリプトと一緒だろうと考えているが、お作法が違うかもしれない。SQL 文は詳しくないので、信用しないように。
大体の言語は読めるけど、書くとなったときの細かなお作法は毎回グーグル先生頼み。
前後の問題はこちら。