データベースの基礎

顧客表(顧客ID, 氏名)には (C1, 青木)、(C2, 井上)、(C3, 上田)、(C4, 江藤) の4行がある。注文表(注文ID, 顧客ID, 金額)には (O1, C1, 3000)、(O2, C2, 8000)、(O3, C1, 6000)、(O4, C3, 2000)、(O5, C2, 9000) の5行がある。SELECT 氏名 FROM 顧客 WHERE 顧客ID IN (SELECT 顧客ID FROM 注文 WHERE 金額 > 5000) の結果は何行になるか。

  1. A1行
  2. B2行
  3. C3行
答えと解説を見る

正解:B. 2行

まず括弧の中の副問い合わせ(サブクエリ)が、金額が5000を超える注文の顧客IDを返します。該当するのはO2(C2)、O3(C1)、O5(C2)の3件なので、顧客IDの集まりは C2、C1、C2 です。外側の問い合わせは、顧客表の各行について、顧客IDがこの集まりに含まれるかどうかを調べます。含まれるのは青木(C1)と井上(C2)で、井上は集まりに2回現れても、顧客表の1行として1回だけ返るので、結果は2行です。3行は、顧客表と注文表を結合してから金額で絞った場合のように、該当する注文の件数だけ行ができると考えた場合の数です。1行は、すべての注文が5000を超える顧客(井上)だけを数えた場合の数です。

  • A. すべての注文が5000を超える顧客だけを数えた場合です。INは、該当する注文が1件でもあれば含めます。
  • B. 正しい。5000を超える注文がある青木と井上の2行です。
  • C. 結合して注文ごとに行を作った場合の数です。INでは同じ顧客は1回だけ返ります。
この分野を解く 分野ページへ

関連する計算ツール

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データベースの基礎のほかの問題

  1. 顧客表(顧客ID, 氏名)と注文表(注文ID, 顧客ID, 金額)から、一度も注文していない顧客の氏名を求めたい。正しいSQL文はどれか。
  2. 関係データベースのビューの説明として、正しいものはどれか。
  3. 関係データベースの表を正規化する主な目的はどれか。
  4. 受注表(受注番号, 商品番号, 数量, 顧客番号, 顧客名)の主キーは{受注番号, 商品番号}で、関数従属は {受注番号, 商品番号} → 数量、受注番号 → 顧客番号、顧客番号 → 顧客名 である。この表を第3正規形まで正規化した結果として正しいものはどれか。
  5. 社員表(社員番号, 氏名, 部署コード, 部署名)の主キーは社員番号で、どの列も1つの値だけを持つ。関数従属は 社員番号 → 氏名、社員番号 → 部署コード、部署コード → 部署名 である。この表の正規形として正しいものはどれか。