ビューとは(全体像)
ビューとは、SELECT(データを検索する命令)の結果を、1つの表のように名前を付けて扱えるようにしたものだよー。中身の実データは元の表にあって、ビュー自身はデータを持たないのー。だから「仮想表(バーチャルな表)」と呼ばれるよー。
身近にたとえると、エクセルでよく使う「絞り込みの見え方」をブックマークしておく感じ。元データは1つの大きな表にあって、ビューは「その見え方」を覚えているだけ。元が変われば、見え方も自然と変わるよー。
押さえるのは、通常ビュー(常に最新)とマテリアライズドビュー(保存して速い)の2つだよー。
詳しく:2つのビューの違いと用途だけ覚えれば戦える
ここが記事の心臓部。まず2つのビューの違いを見ていこーね。
通常ビュー と マテリアライズドビュー
| 通常ビュー | マテリアライズドビュー | |
|---|---|---|
| データの持ち方 | 持たない(見るたびに計算) | 結果を物理的に保存しておく |
| 最新かどうか | 常に最新 | 保存した時点のもの(最新化に手間) |
| 検索の速さ | そのつど計算するので遅め | 保存ずみなので速い |
| 使いどころ | ふだんの絞り込み | 集計やデータ分析(DWH) |
通常ビューは見るたびに計算するから常に最新、マテリアライズドビューは結果を保存ずみだから検索が速い——この対比が一番大事だよー。マテリアライズドビューはPostgreSQLやOracle、SQL Serverで使えるけれど、MySQLは対応していないのー。
次に、ビューの用途だよー。
ビューの主な用途
| 用途 | 内容 |
|---|---|
| セキュリティ | 見せたい列だけに絞ってアクセスさせる |
| 複雑な検索のまとめ | ややこしい検索を1つの名前にまとめる(カプセル化) |
| 互換性の維持 | 表の作りが変わっても、ビューの見え方を保つ |
ここでひっかけが「ビューはぜんぶ書き換え(更新)できる」という誤解だよー。更新できるのは、1つの表から素直に作った単純なビューだけ。複数の表をつなげたり(JOIN)、集計(合計や件数)を含むビューは更新できないのー。
わかりやすく言い換えると
要するに、エクセルの保存フィルタでイメージするとラクだよー。
①通常ビュー … 絞り込みの「見え方」を保存(元が変わると自動で最新になる)
②マテリアライズドビュー … その見え方を「写真に撮って保存」(だから表示は速い・でも元が変わっても写真は古いまま)
③更新できるビュー … 元の表をそのまま映しているような単純なビューだけ
つまり、「通常=常に最新」「マテリアライズド=保存して速い」「データは持たない仮想表」、この3点が試験の急所なのー。
試験のツボ
🔴 一番出る:2つのビューの対比
①通常ビュー = 見るたびに計算・常に最新
②マテリアライズドビュー = 結果を保存・検索が速い(MySQLは非対応)
🔴 次に出る:ビューはデータを持たない仮想表
①実データは元の表にあり、ビュー自身は持たない
②だから「テーブル」とは別物
🟡 押さえると安定:用途と更新の制限
①用途はセキュリティ・複雑な検索のまとめ・互換性維持
②更新できるのは単純な構造のビューだけ(JOINや集計を含むと不可)
よくある間違い
①「ビューはテーブルと同じで、実データを持っている」→ ✗ ビューはデータを持たない仮想表。実データは元の表にある。
②「どんなビューでも自由に書き換え(更新)できる」→ ✗ 更新できるのは単純な構造のビューだけ。JOINや集計を含むと更新できない。
③「マテリアライズドビューはどのデータベースソフトでも使える」→ ✗ PostgreSQL・Oracle・SQL Serverは対応するが、MySQLは非対応。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(ビューとは)
ビューに関する次の記述のうち、正しいものはどれか。
- ビューは画面を必ず明るく表示するためだけに使う専用の設定のことだとされているものなのである
- ビューは音を必ず大きく鳴らすためだけに使う専用の機能のことだとされているもの
- ビューはSELECTの結果を表のように扱える仮想表で、実データは持たないものである
- ビューは保存した文字を必ず全部消すための専用の命令のことだとされているものである
解答は 3 だよー。
ビューは、SELECT(検索)の結果を1つの表のように扱える仮想表で、実データは持たないのー。実データは元の表にあって、ビューは「見せ方」を覚えているだけだよー。
選択肢1の「明るく表示」、選択肢2の「大きく鳴らす」、選択肢4の「全部消す命令」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 画面の明るさの設定ではない |
| 2 | ✗ | 音を鳴らす機能ではない |
| 3 | ✓ | SELECTの結果を扱う仮想表で実データは持たない |
| 4 | ✗ | 文字を消す命令ではない |
オリジナル問題2(マテリアライズドビュー)
マテリアライズドビューに関する次の記述のうち、正しいものはどれか。
- マテリアライズドビューは結果を物理的に保存しておくので検索が速く、集計などで活用される
- マテリアライズドビューはデータをまったく保存せず必ず毎回いちから計算するものだとされているのだ
- マテリアライズドビューは画面を必ず点滅させるための専用の設定だとされている
- マテリアライズドビューは音を必ず二重に鳴らすための専用の機能のことだとされているのである
解答は 1 だよー。
マテリアライズドビューは、結果を物理的に保存しておくから検索が速いのー。集計やデータ分析(DWH)でよく活用されるよー。そのかわり、最新の状態に保つには手間がかかるんだよー。
選択肢2の「まったく保存しない」は通常ビューの説明で誤りなのー。選択肢3の「点滅」、選択肢4の「二重に鳴らす」も関係ないよー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 結果を保存するので検索が速い |
| 2 | ✗ | 保存するのがマテリアライズドの特徴 |
| 3 | ✗ | 点滅させる設定ではない |
| 4 | ✗ | 音を鳴らす機能ではない |
オリジナル問題3(更新できるビュー)
ビューの更新に関する次の記述のうち、正しいものはどれか。
- ビューはどんな作りであっても必ず自由に書き換え(更新)ができるものだとされている
- ビューを更新できるのは、1つの表から素直に作った単純な構造のビューだけに限られる
- ビューは複数の表をつなげたものや集計を含むものほどかえって更新しやすくなるとされている
- ビューの更新ができるかどうかは、画面の明るさの設定だけで決まるものだとされる
解答は 2 だよー。
ビューを書き換え(更新)できるのは、1つの表から素直に作った単純な構造のビューだけなのー。複数の表をつなげたり(JOIN)、集計を含むビューは更新できないんだよー。
選択肢1の「どんな作りでも更新できる」、選択肢3の「JOINや集計だと更新しやすい」は誤りなのー。選択肢4の「明るさで決まる」も関係ないよー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 単純な構造のビューに限られる |
| 2 | ✓ | 単純な構造のビューだけ更新できる |
| 3 | ✗ | JOINや集計を含むと更新できない |
| 4 | ✗ | 画面の明るさとは関係ない |
まとめ
押さえどころ
- 🔴 2つのビュー = 通常ビューは見るたびに計算して常に最新/マテリアライズドビューは結果を保存して検索が速い(MySQLは非対応)。
- 🔴 ビューは仮想表 = データを持たず、実データは元の表にある。テーブルとは別物。
- 🟡 用途と更新 = 用途はセキュリティ・複雑な検索のまとめ・互換性維持。更新できるのは単純な構造のビューだけ。
次に学ぶ
- インデックスの種類 ── 検索を速くするしくみ。マテリアライズドビューと同じく「速さ」を支える土台。
- 正規化(詳細) ── 表を上手に分けるルール。ビューは分けた表を見やすくまとめ直すのにも使う。
- トランザクションACID ── データを正しく保つ4つの約束。表を更新するときの土台。
執筆: SikakuQuest編集部