ビュー びゅー
仮想テーブルSELECTセキュリティデータ抽象化SQLマテリアライズドビュー
ビューについて教えて
簡単に言うとこんな感じ!
ビューは「複雑なSQLに名前をつけてテーブルのふりをさせる」仕組みだよ! 毎回長い SQL を書くかわりに「売上サマリー」って名前のビューを一度作れば、以降は普通のテーブルみたいに使えるんだ。しかも実データは持たないから、容量も食わないってこと!
ビューとは
ビュー(View)とは、1つ以上のテーブルに対するSELECTクエリを「仮想テーブル」として名前をつけて保存する機能です。ビュー自体にデータは保存されておらず、参照するたびに元のSQLが実行されます。
ビューの主な用途は3つあります。1つ目は複雑なクエリの簡略化:何度も使う複雑なJOINや集計クエリをビューとして定義しておくことで、シンプルなSELECT * FROM view_nameで取得できます。2つ目はセキュリティ:機密カラム(給与・個人情報など)を除いたビューだけをユーザーに公開し、元テーブルへの直接アクセスを禁止することで情報漏えいを防ぎます。3つ目はデータの論理的な抽象化:テーブル構造が変わっても、ビューのインターフェースを維持することでアプリへの影響を最小限にできます。
ビューの構造
ビューの作成・使用例
-- ビュー作成(給与を除いた社員情報のみ公開)
CREATE VIEW v_employee_public AS
SELECT
e.id,
e.name,
d.dept_name,
e.hire_date
FROM employees e
JOIN departments d ON e.dept_id = d.id;
-- 普通のテーブルと同じ感覚で使える
SELECT * FROM v_employee_public WHERE dept_name = '営業部';
ビューの種類と特徴
| 種類 | 説明 | 例 |
|---|---|---|
| 単純ビュー | 1テーブルのSELECT結果 | 特定カラムを絞った社員ビュー |
| 結合ビュー | 複数テーブルのJOIN結果 | 社員名+部署名を結合したビュー |
| 集計ビュー | GROUP BY や集計関数を含む | 部署別平均給与ビュー |
| 更新可能ビュー | ビューを通じてINSERT/UPDATE/DELETEが可能 | 単純ビューの一部 |
| マテリアライズドビュー | クエリ結果を実体として保存(別記事参照) | 毎日更新される売上集計ビュー |
歴史と背景
- 1974年:IBMのSEQUEL(SQL前身)にビューの概念が最初に登場
- 1979年:Oracle の初期バージョンがビュー機能を実装
- 1986年:SQL-86(初のSQL標準)でビューが正式に規定される
- 1992年:SQL-92 で更新可能ビューの条件が詳細化
- 現在:大規模DBではビューを「データアクセス層のAPI」として使い、テーブル構造の変更をビューで吸収するアーキテクチャが定石
関連する規格・RFC
| 規格 | 内容 |
|---|---|
| ISO/IEC 9075 SQL-86 以降 | ビューの作成・削除・更新可能性の標準仕様 |
| SQL:1999 | WITH CHECK OPTION(ビュー経由の更新制約)の詳細化 |
関連用語
- マテリアライズドビュー — クエリ結果を実体として保存する高速化バリエーション
- ストアドプロシージャ — DB内部に保存しておく手続き型プログラム
- トリガー — テーブルへの操作を契機に自動実行されるDB内プログラム
- インデックス — 検索を高速化するための索引構造
- クエリ最適化・実行計画 — クエリを効率よく実行するためのDBエンジンの最適化処理
- スキーマ — データベース内のテーブル・ビューなどの論理的な設計図
- 制約 — テーブルのデータに課すルール