FE EXAM

ビュー(仮想的な表)

1つ以上の表から導かれる仮想的な表。

DIAGRAM
実表(実体あり)ビュー(仮想)
実表: 社員社員ID氏名部署ID給与101佐藤D1420102鈴木D2510103高橋D1380実表: 部署部署ID部署名D1営業部D2開発部ビュー定義(問合せ)SELECT 氏名, 部署名FROM 社員 JOIN 部署ON 部署ID = 部署ID※ 給与列は見せないビュー: 社員一覧氏名部署名佐藤営業部鈴木開発部高橋営業部データの実体は持たず、参照のたびに実表から導出
解説

📌
ビューとは

定義だけ保存 → 参照時に実表から作る実表SELECTビュー

ビューとは、1つ以上の表(テーブル)から導かれる仮想的な表のことです。実際にデータを保存している表を「実表(じっぴょう)」と呼びますが、ビューは「実表に対するSELECT文(問合せ)」に名前を付けて保存したもので、データの実体そのものは持ちません。

ビューを参照すると、その都度ビュー定義のSELECT文が実行され、実表から最新のデータを取り出して仮想的な表として見せてくれます。利用者からは普通の表と同じように SELECT * FROM ビュー名 で扱えます。

身近な例で考えると、図書館の「新刊コーナー」に似ています。本棚(実表)には全ての本が並んでいますが、「新刊コーナー」という案内(ビュー)は条件に合う本だけをまとめて見せる入口です。上の図解で、2つの実表から「氏名と部署名」だけを見せるビューが作られる流れを確認できます。

📌
利点(セキュリティ・抽象化)

ビューを使うと、主にセキュリティ(機密の保護)抽象化(複雑さの隠蔽)という2つの利点が得られます。
機密列を隠せる:実表に給与のような機密列があっても、ビューには公開してよい列だけを含めれば、利用者には機密列が見えません
行を絞れる:「自分の部署の行だけ」のように条件付きのビューを作れば、利用者ごとに見せる範囲を分けられます
複雑な問合せを再利用できる:何度も書く長い結合(JOIN)をビューに包めば、以後はビュー名だけで簡潔に呼び出せます

抽象化の観点では、実表の構造(列の並びや結合関係)が変わっても、ビューの定義側だけ直せば利用者側のSELECT文を書き換えずに済むという利点もあります。実表の細かい事情を利用者から隠す「目隠し」の役割です。

身近な例で考えると、会社の受付のようなものです。来客(利用者)は受付(ビュー)で必要な案内だけを受け取り、社内の機密資料(機密列)や複雑な組織図(結合)を直接見る必要はありません。必要な情報だけを安全に渡す窓口がビューです。

📌
物理テーブルとの違い

ビューと物理テーブル(実表)の最大の違いは、データの実体を持つかどうかです。実表はディスクにデータを保存していますが、ビューは定義(問合せ)だけを持ち、参照のたびに実表から値を組み立てます。

項目物理テーブル(実表)ビュー
データの実体持つ(ディスクに保存)持たない(定義のみ)
最新性保存された値常に実表の最新値を反映
記憶領域行数に応じて消費ほぼ消費しない
更新自由に更新可能条件次第で制限あり

ビューは実体を持たないので、実表のデータが更新されればビューの内容も自動的に最新の状態になります。ただし、複数の表を結合したビューや集計を含むビューは、どの実表のどの行を直せばよいか一意に決まらないため、更新できない(読み取り専用になる)場合がある点に注意しましょう。

🛠
ビューを作るSQL(CREATE VIEW)

CREATE VIEWビュー名 ASSELECT ...FROM 実表登録ビュー(定義のみ)SELECT文を記憶データは持たない↓ 参照時に実行

ビューを新しく作るには CREATE VIEW ビュー名 AS SELECT文 という形の SQL を使います。「AS」のあとに書いた SELECT 文がビューの定義として記録されます。

CREATE VIEW 社員一覧 AS
SELECT 氏名, 部署名
FROM 社員 JOIN 部署
ON 社員.部署ID = 部署.部署ID

これを実行するとデータベースに「社員一覧」という名前のビューが登録されます。以後は SELECT * FROM 社員一覧 と書くだけで、複雑な JOIN を毎回書かなくて済みます。なぜ便利かというと、一度定義すれば何度でも簡単に呼び出せるからです。

ビューを削除したいときは DROP VIEW ビュー名 を使います。ビューの定義だけが消え、もとの実表のデータはそのまま残ります。ビューはあくまで「見かけの表」なので、消しても実データには影響しません。

🔍
ビューが「仮想」である理由 — 参照のたびに実行される仕組み

利用者のSELECT文ビュー定義SELECT文に展開・実行実表(最新データ)から値を取得→ 結果を返す

利用者が SELECT * FROM 社員一覧 のようにビューを参照すると、データベースはビューの定義(あらかじめ登録したSELECT文)をその場で実行し、実表から値を集めて結果を作って返します。

なぜ「仮想」と呼ぶかというと、ビュー自身はデータをどこにも保存していないからです。テーブルのように「ここにデータがある」という実体がなく、参照されるたびに実表から作り出されます。
・実表を更新した直後にビューを見ると、常に最新の値が見える
・ビューを参照するたびにSELECT文が内部で実行される
・ビューを削除しても実表のデータは消えない

身近な例で考えると、「今日の天気予報」のWebページのようなものです。そのページ(ビュー)自体にデータは入っておらず、開くたびに気象サーバ(実表)から最新の情報を取得して表示します。同じURLでも昨日と今日で内容が違うのは、毎回最新データで生成されるからです。ビューも同じ仕組みで動いています。

練習問題

🎯
基本情報技術者 練習問題

Q1.ビュー(view)の説明として最も適切なものはどれか。
A.1つ以上の表から導かれる仮想的な表である
B.データを物理的に保存する実体のある表である
C.行を高速に検索するための索引である
D.トランザクションの更新履歴を記録するファイルである
Q2.ビューを利用する利点として適切でないものはどれか。
A.特定の列だけを見せて機密列を隠せる
B.複雑な結合をビュー名で簡潔に再利用できる
C.実表とは別に大量のデータを物理コピーして保管できる
D.利用者ごとに見せる範囲を分けられる
Q3.ビューと実表(物理テーブル)の違いとして正しいものはどれか。
A.実表はデータの実体を持つが、ビューは持たない
B.ビューはデータの実体を持つが、実表は持たない
C.どちらもデータの実体を持たない
D.ビューは実表より必ず多くの行を持つ

関連コンテンツ