データベース操作・制御

ビュー びゅー

仮想テーブルSELECTセキュリティデータ抽象化SQLマテリアライズドビュー
ビューについて教えて

簡単に言うとこんな感じ!

ビューは「複雑なSQLに名前をつけてテーブルのふりをさせる」仕組みだよ! 毎回長い SQL を書くかわりに「売上サマリー」って名前のビューを一度作れば、以降は普通のテーブルみたいに使えるんだ。しかも実データは持たないから、容量も食わないってこと!


ビューとは

ビュー(View)とは、1つ以上のテーブルに対するSELECTクエリを「仮想テーブル」として名前をつけて保存する機能です。ビュー自体にデータは保存されておらず、参照するたびに元のSQLが実行されます。

ビューの主な用途は3つあります。1つ目は複雑なクエリの簡略化:何度も使う複雑なJOINや集計クエリをビューとして定義しておくことで、シンプルなSELECT * FROM view_nameで取得できます。2つ目はセキュリティ:機密カラム(給与・個人情報など)を除いたビューだけをユーザーに公開し、元テーブルへの直接アクセスを禁止することで情報漏えいを防ぎます。3つ目はデータの論理的な抽象化:テーブル構造が変わっても、ビューのインターフェースを維持することでアプリへの影響を最小限にできます。


ビューの構造

ビューのしくみ 社員テーブル id / name / salary dept_id / email … (機密情報含む) 部署テーブル id / dept_name budget … ビュー定義 SELECT e.id, e.name, d.dept_name FROM employees e JOIN … 仮想テーブル id / name / dept_name (salaryは非公開) ビューには実データなし。参照のたびに定義のSQLが実行される

ビューの作成・使用例

-- ビュー作成(給与を除いた社員情報のみ公開)
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:1999WITH CHECK OPTION(ビュー経由の更新制約)の詳細化

関連用語