経営情報システム ③初級編_データベースとSQL16問〜20問

問16:商品テーブルに新しい商品データを1件追加するSQLとして最も適切なものはどれか。

  • A:ADD INTO 商品テーブル VALUES (‘P001’, ‘スマートフォン’, 80000)
  • B:INSERT INTO 商品テーブル VALUES (‘P001’, ‘スマートフォン’, 80000)
  • C:UPDATE 商品テーブル SET 商品名=’スマートフォン’ WHERE 商品ID=’P001′
  • D:CREATE 商品テーブル VALUES (‘P001’, ‘スマートフォン’, 80000)
  • E:MERGE INTO 商品テーブル VALUES (‘P001’, ‘スマートフォン’, 80000)
【第16問:正解と解説】

正解:B
【解説】
・A:不適切:「ADD INTO」はSQLの標準的なデータ追加命令ではありません。データの追加にはINSERT INTOを使います。
・B:適切:INSERT INTO テーブル名 VALUES (値1, 値2, …) が新規行を追加する標準的なSQL構文です。
・C:不適切:UPDATE文は既存データの内容を変更(更新)するためのSQLです。新しいデータを追加するためにはINSERT文を使います。
・D:不適切:CREATE文はテーブルや索引などのデータベースオブジェクトを新規作成するDDL文です。既存テーブルへのデータ追加にはINSERT文を使います。
・E:不適切:MERGE文はデータが存在すれば更新・存在しなければ挿入という処理を1つの命令で行うSQLですが、単純なデータ追加の標準命令はINSERT文です。


問17:社員テーブルの社員IDがE005の社員の部署を「人事部」に変更するSQL文として最も適切なものはどれか。

  • A:INSERT INTO 社員テーブル SET 部署=’人事部’ WHERE 社員ID=’E005′
  • B:MODIFY 社員テーブル 部署=’人事部’ WHERE 社員ID=’E005′
  • C:DELETE 社員テーブル WHERE 社員ID=’E005′ AND 部署=’人事部’
  • D:SELECT 部署=’人事部’ FROM 社員テーブル WHERE 社員ID=’E005′
  • E:UPDATE 社員テーブル SET 部署=’人事部’ WHERE 社員ID=’E005′
【第17問:正解と解説】

正解:E
【解説】
・A:不適切:INSERT文は新規行の追加に使うものであり、既存データの更新にはUPDATE文を使います。
・B:不適切:「MODIFY」はSQLの標準的なデータ更新命令ではありません。
・C:不適切:DELETE文はデータを削除するためのSQL命令であり、データの更新には使いません。
・D:不適切:SELECT文はデータを取得(読み取り)するためのSQL命令であり、データの更新はできません。
・E:適切:UPDATE テーブル名 SET 列名=値 WHERE 条件 が既存データを更新するSQL構文です。WHERE句で更新対象行を特定しない場合全行が更新されるので注意が必要です。


問18:データベースの主キー・外部キー・正規化の関係に関する記述として最も適切なものはどれか。

  • A:正規化を進めると主キーが不要になり外部キーのみでテーブルを管理できるようになる
  • B:外部キーはテーブルの全列に自動設定され正規化後は主キーと同一の列になる
  • C:正規化によりテーブルを分割した後は主キーと外部キーを使って分割前の情報をJOINで再構成できる
  • D:主キーは各テーブルに必ず2つ以上設定しなければならないというルールがある
  • E:正規化の目的は主キーを削除してデータの管理をシンプルにすることである
【第18問:正解と解説】

正解:C
【解説】
・A:不適切:正規化を進めてもテーブルの主キーは依然として必要です。各テーブルで行を一意に識別するために主キーは不可欠です。
・B:不適切:外部キーは自動設定されるものではなく開発者が明示的に設定します。
・C:適切:正規化によって顧客テーブル・商品テーブル・注文テーブルなどに分割した後も各テーブルの主キーと他テーブルの外部キーを使ったJOIN操作で分割前の情報を再構成して取得できます。これが正規化・JOIN・主キー/外部キーの連携の本質です。
・D:不適切:主キーは各テーブルに1つのみです(複合キーとして複数列を組み合わせることは可能ですが主キー「自体」は1つです)。
・E:不適切:正規化の目的はデータの冗長性排除と更新異常の防止です。主キーを削除することとは全く逆の方向性です。


問19:SQLのSELECT文で使える集計関数に関する記述として最も適切なものはどれか。

  • A:COUNT(列名)は指定した列の合計値を計算する関数である
  • B:SUM(列名)は指定した列のNULL以外の行数を数える関数である
  • C:AVG(列名)は指定した列の最大値を返す関数である
  • D:MAX(列名)は最大値を返しMIN(列名)は最小値を返す集計関数である
  • E:SUM関数はWHERE句の中でのみ使用できSELECT句では使用できない
【第19問:正解と解説】

正解:D
【解説】
・A:不適切:COUNT(列名)は指定した列のNULL以外の行数を数える関数です。合計値の計算はSUM関数を使います。
・B:不適切:SUM(列名)は指定した列の数値合計を計算する関数です。行数のカウントにはCOUNT関数を使います。
・C:不適切:AVG(列名)は指定した列の平均値を返す関数です。最大値を返すのはMAX関数です。
・D:適切:MAX(列名)は指定した列の最大値を、MIN(列名)は最小値を返す集計関数です。代表的なSQL集計関数にはCOUNT(件数)・SUM(合計)・AVG(平均)・MAX(最大値)・MIN(最小値)があります。
・E:不適切:SUM関数はSELECT句の中で使用するのが一般的です。集計条件の指定にはHAVING句を使います。


問20:データベース設計において1対多の関係の例として最も適切なものはどれか。

  • A:1人の社員が1つのIDカードを持ち1つのIDカードは1人の社員のみに発行される関係
  • B:1人の顧客が複数の注文を行い1つの注文は必ず1人の顧客に紐づく関係
  • C:1つの商品が複数のカテゴリに属し1つのカテゴリも複数の商品を持てる関係
  • D:テーブルが1つだけ存在しそのテーブルがすべてのデータを管理する状態
  • E:主キーと外部キーが同一の列に設定されている関係
【第20問:正解と解説】

正解:B
【解説】
・A:不適切:1人の社員が1つのIDカードというのは「1対1の関係」の例です。
・B:適切:1人の顧客が複数の注文を行い1つの注文は1人の顧客に紐づくというのは「1対多(1:N)の関係」の典型例です。外部キーを使って顧客テーブルと注文テーブルを関連付けて表現します。
・C:不適切:1つの商品が複数のカテゴリに属し1つのカテゴリも複数の商品を持つというのは「多対多(N:M)の関係」の例です。
・D:不適切:テーブルが1つだけ存在する状態は1対多の関係とは関係なく、正規化されていない非効率な設計の例として論じられます。
・E:不適切:主キーと外部キーが同一列というのは特定の実装パターンであり1対多の関係そのものの説明ではありません。


コメント

タイトルとURLをコピーしました