基本情報技術者試験 (FE) 科目 A — データベース

ビュー — 実表との違い

定義

ビューは問合せに名前を付けたもので、実際のデータは持たない仮想的な表。参照されるたびに定義された問合せが実行されるため、元の実表が変わるとビューの内容も変わる。

ビューは「名前を付けた問合せ」

CREATE VIEW は、SELECT 文に名前を付けて、 あたかも表のように扱えるようにします。

CREATE VIEW 高額商品 AS
  SELECT 商品番号, 商品名, 単価
  FROM 商品
  WHERE 単価 >= 200

これ以降 SELECT * FROM 高額商品 と書けます。 使う側からは表と区別が付きません。

実表とビューの違い

実際にデータを持っている表を実表と呼び、 ビューと区別します。

実表ビュー
データの実体持つ持たない
参照したときそのまま読む定義された SELECT を実行する
元の表が変わると内容も変わる
更新できる条件を満たせばできる

試す: ビューを作って、表と同じように SELECT できることを確かめる

リセットで表の中身も元に戻ります
エディタを読み込み中…

元の表を変えるとビューも変わる

これがビューの本質です。下の Playground では:

  1. ビューを作る(単価 200 以上の商品)
  2. ビューを見る → 2 行
  3. ボールペンの単価を 1000 に更新する
  4. もう一度ビューを見る → 3 行に増えている

ビューがデータを持っていたら、こうはなりません。参照のたびに問合せが実行し直されている証拠です。

試す: ビューを直接 UPDATE しようとすると弾かれる

リセットで表の中身も元に戻ります
エディタを読み込み中…

ビューの使いどころ

  • 複雑な問合せの再利用。長い結合を毎回書かずに済む
  • 列を隠す。給与の列を含まないビューだけを見せて、アクセス権をビューに与える
  • 変更の吸収。元の表の構造が変わっても、 ビューの定義側で調整すれば利用者側は書き換えなくてよい

元の表を更新して確かめる

4 文をまとめて実行します。結果が文ごとに表示されるので、 同じビューを 2 回見たときに内容が変わることを確かめてください。

試す: 2 回目の SELECT で行が増える (ビューはデータを持たない)

リセットで表の中身も元に戻ります
エディタを読み込み中…

試験で問われるポイント

  • ビューはデータを持たないこと(最頻出)
  • 実表という用語とビューの対比
  • ビューとアクセス権を組み合わせて列を隠す使い方
  • 集約や結合を含むビューが更新できない理由

よくある疑問

Q.ビューにデータは保存されますか?
A.保存されません。ビューは問合せに名前を付けたものなので、参照するたびに定義された SELECT が実行されます。だから元の表が変われば、ビューの内容も自動的に変わります。
Q.ビューは更新できますか?
A.条件を満たせば更新できますが、集約や結合を含むビューは一般に更新できません。どの行を書き換えるべきかが一意に決まらないためです。この実行シミュレーターではビューの更新は行えません。
Q.ビューを使う利点は何ですか?
A.複雑な問合せに名前を付けて再利用できること、見せたくない列を隠して必要な列だけを公開できること(アクセス権と組み合わせる)、そして元の表の構造が変わってもビューの定義で吸収できることです。

自由に試す / 他のレッスンを読む

データベース分野をもっと学ぶ(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講