データベースの基礎

表Rの列xの値は 1、1、2、3 の4行、表Sの列xの値は 1、1、2、4 の4行である。SELECT * FROM R INNER JOIN S ON R.x = S.x の結果は何行になるか。

  1. A2行
  2. B3行
  3. C5行
答えと解説を見る

正解:C. 5行

結合では、条件を満たす行の組み合わせが1つずつ結果の行になります。x = 1 については、Rの2行とSの2行のすべての組み合わせが条件を満たすので 2 × 2 = 4 行、x = 2 については 1 × 1 = 1 行です。Rの3とSの4は相手がいないので、内部結合の結果には出てきません。合計は 4 + 1 = 5 行です。2行は、一致する値の種類(1と2)ごとに1行ずつしかできないと考えた場合の行数です。3行は、Rの各行についてSに一致する値があるかどうかだけを見た場合(SELECT * FROM R WHERE x IN (SELECT x FROM S) のような問い合わせ)の行数です。条件を付けない直積なら 4 × 4 = 16 行になります。結合する列の値が重複していると、結果の行が掛け算で増えることに注意が必要です。

  • A. 一致する値の種類(1と2)ごとに1行と考えた場合です。同じ値の行どうしは、すべての組み合わせが結果になります。
  • B. Rの各行が1回ずつしか結合されないと考えた場合の行数です。重複する値は、組み合わせの数だけ行が増えます。
  • C. 正しい。x = 1 の組み合わせが 2 × 2 = 4 行、x = 2 が1行で、合計5行です。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. 顧客表(顧客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) の結果は何行になるか。
  2. 顧客表(顧客ID, 氏名)と注文表(注文ID, 顧客ID, 金額)から、一度も注文していない顧客の氏名を求めたい。正しいSQL文はどれか。
  3. 関係データベースのビューの説明として、正しいものはどれか。
  4. 関係データベースの表を正規化する主な目的はどれか。
  5. 受注表(受注番号, 商品番号, 数量, 顧客番号, 顧客名)の主キーは{受注番号, 商品番号}で、関数従属は {受注番号, 商品番号} → 数量、受注番号 → 顧客番号、顧客番号 → 顧客名 である。この表を第3正規形まで正規化した結果として正しいものはどれか。