基本情報技術者 2009年 春期 午前(科目A) 問33
問題文
関係データベースの“製品”表と“売上”表から、売上報告のビュー表を定義する
SQL文中のaに入るものはどれか。
CREATE VIEW 売上報告(製品番号, 製品名, 納品数, 売上年月日, 売上金額)
AS [ a ] 製品.製品番号, 製品.製品名, 売上.納品数, 売上.売上年月日,
売上.納品数 * 製品.単価
FROM 製品, 売上
WHERE 製品.製品番号 = 売上.製品番号

選択肢
ア:GRANT
イ:INSERT
ウ:SCHEMA
エ:SELECT(正解)
🔒 解説は解答すると表示されます
ビュー定義のSELECT句【午前解説】
正解の理由
CREATE VIEW の構文規則により、AS の後には SELECT 文を置いてビューの返す列を指定します。問題文の目的は「製品表と売上表を結合して納品数や売上金額を計算して返すビュー」を定義することなので、SELECT によって列(および計算式)を列挙し、FROM と WHERE でテーブル結合を表現します。したがって a に入るべきキーワードは SELECT であり、正解は エ です。
以下が問題文に合致する完全な SQL の例です。
CREATE VIEW 売上報告(製品番号, 製品名, 納品数, 売上年月日, 売上金額)
AS SELECT 製品.製品番号, 製品.製品名, 売上.納品数, 売上.売上年月日,
売上.納品数 * 製品.単価
FROM 製品, 売上
WHERE 製品.製品番号 = 売上.製品番号;
解法ステップ
- CREATE VIEW 文の一般形を思い出す:「CREATE VIEW 名(列名一覧) AS SELECT … FROM … WHERE …」。
- 問題文で AS の直後に何が来るべきか確認する(列名・式の羅列が必要)。
- 選択肢を文脈で当てはめる:SELECT が適合、他は機能が合わないことを確認する。
- 列数とSELECTの項目数が一致しているか、計算式の位置が正しいかをチェックする。
選択肢別の誤答解説
- ア: GRANT
- 説明:GRANT は権限付与に使う DCL(データ制御言語)で、CREATE VIEW の AS 直後に置くものではありません。
- イ: INSERT
- 説明:INSERT はデータ操作(DML)でテーブルに行を追加するためのもので、ビュー定義を記述する場所には不適切です。
- ウ: SCHEMA
- 説明:SCHEMA はスキーマ操作のキーワードであり、AS の直後に置いて列や式を列挙する意味にはなりません。
- エ: エ(SELECT)
- 説明:SELECT は列や式を指定し、FROM/WHERE でテーブル結合を行う文であるため、CREATE VIEW … AS の直後に来て正しくビューを定義します。
よくある誤解
- 「CREATE VIEW の後は権限付与のキーワード(GRANT)が入る」と勘違いする:GRANT は権限管理用でビュー定義とは無関係です。
- 「INSERT を使ってビューを作る」と考える誤り:INSERT はデータ挿入のための文で、ビュー定義には使いません。
- 「SCHEMA を入れればスキーマ指定になる」と誤認:SCHEMA はスキーマ操作に関するキーワードで、AS の直後に置いてビューの列指定をする構文にはなりません。
補足コラム
- 推奨スタイルとしては暗黙のカンマ結合(FROM 製品, 売上 WHERE …)よりも明示的な JOIN を使うと可読性や保守性が向上します。例:
FROM 製品 JOIN 売上 ON 製品.製品番号 = 売上.製品番号 - ビューの列名リストは SELECT による出力列の数と順序を厳密に合わせる必要があります。計算列にはエイリアスを付けることも可能です(例:売上.納品数 * 製品.単価 AS 売上金額)。
- 一部のデータベースでは、ビューに対する更新(INSERT/UPDATE/DELETE)が制限されるため、更新可能性を考慮する場合は単純な1テーブルのビューにするか十分検討してください。
FAQ
Q1: ビュー定義で列名を省略してもよいですか?
A1: 省略は可能ですが、SELECT の各列に適切な名前があるかを確認してください。明示的に列名リストを指定すると可読性と安定性が高まります。
A1: 省略は可能ですが、SELECT の各列に適切な名前があるかを確認してください。明示的に列名リストを指定すると可読性と安定性が高まります。
Q2: 計算列に別名(AS)を付ける必要はありますか?
A2: 必須ではありませんが、クライアントから見やすくするために付けるのが一般的です。また列名リストを指定する場合は順序だけ合わせておけば動作します。
A2: 必須ではありませんが、クライアントから見やすくするために付けるのが一般的です。また列名リストを指定する場合は順序だけ合わせておけば動作します。
Q3: FROM に複数テーブルを書くとき、どちらの書き方を使えばよいですか?
A3: 機能的にはどちらも動きますが、明示的な JOIN を使うと結合条件が明確になりミスを防げます。
A3: 機能的にはどちらも動きますが、明示的な JOIN を使うと結合条件が明確になりミスを防げます。
関連キーワード: SQL、CREATE VIEW、SELECT、FROM、WHERE、JOIN、ビュー定義、計算列、列名リスト、テーブル結合

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

