データベースの基礎

社員表(社員番号, 氏名, 部署ID)に4行あり、部署IDは順に10、20、10、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 社員.氏名, 部署.部署名 FROM 社員 INNER JOIN 部署 ON 社員.部署ID = 部署.部署ID の結果は何行になるか。

  1. A3行
  2. B4行
  3. C12行
答えと解説を見る

正解:A. 3行

INNER JOIN(内部結合)は、ON の条件を満たす行の組み合わせだけを結果にします。部署IDが10の社員2人は部署10の行と、部署IDが20の社員1人は部署20の行と組み合わさるので、結果は3行です。部署IDがNULLの社員は、NULLとの比較が真にならないので、どの部署とも結合されずに結果から消えます。また、社員のいない部署30も結果に出てきません。4行は、社員表のすべての行を残す左外部結合(社員 LEFT OUTER JOIN 部署)の場合の行数です。12行は、条件を付けずにすべての組み合わせを作るCROSS JOIN(直積)の 4 × 3 = 12 行です。

  • A. 正しい。部署IDが一致する3組だけが結果になります。
  • B. 社員をすべて残す左外部結合の場合の行数です。部署IDがNULLの社員は、内部結合では消えます。
  • C. 結合の条件を付けずに、すべての組み合わせを作った直積の行数(4 × 3)です。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. 社員表(社員番号, 氏名, 部署ID)に5行あり、部署IDは順に10、20、10、NULL、NULLである。部署表(部署ID, 部署名)には部署IDが10、20、30の3行がある。SELECT 部署.部署名, 社員.氏名 FROM 部署 LEFT OUTER JOIN 社員 ON 部署.部署ID = 社員.部署ID の結果は何行になるか。
  2. 表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 の結果は何行になるか。
  3. 顧客表(顧客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) の結果は何行になるか。
  4. 顧客表(顧客ID, 氏名)と注文表(注文ID, 顧客ID, 金額)から、一度も注文していない顧客の氏名を求めたい。正しいSQL文はどれか。
  5. 関係データベースのビューの説明として、正しいものはどれか。