💭

【SQL入門】ビューについて調べてみたことまとめ

に公開

ビュー

ビューは、データベースにおける仮想的なテーブルです。
実体はテーブルではなく、保存されたSELECT文であるため、ビューを呼び出すたびに、そのSELECT文が実行されて結果が生成されます。何度も同じSQL文を入力する必要がなくなります。

ビューの仕組みと役割
ビューは、特定のSELECT文を名前付きで保存するものです。
たとえば、複数のテーブルを結合して必要な情報だけを抽出する複雑なクエリがあるとします。このクエリをビューとして保存しておけば、次回からはそのビュー名を使うだけで、同じ結果を簡単に取得できます。
ビューは、複雑なクエリの定義を名前として保存する機能であり、その実行はアクセスされたときにオンデマンドで行われます。
ビューを作成することで、空の箱が作られるイメージ
ビューを実行することで箱の中に結果が入る

ビューの作成
CREATE VIEW ビュー名 AS SELECT
ビューの削除
DROP VIEW ビュー名
4月に関する家計簿データのみを持つビューを定義
CREATE VIEW 家計簿4AS
SELECT * FROM 家計簿
 WHERE 日付 >= '2025-04-01'
   AND 日付 < '2025-05-01'
家計簿4月ビューを使ったSQL文の実行
SELECT * FROM 家計簿4;
SELECT DISTINCT 費目ID FROM 家計簿4;

ビューのメリット

  • SQL文がシンプルになる
  • 機密情報へのアクセス権限を利用者の立場に応じて設定しやすくなる
    テーブルAのある列に機密情報が含まれているとする。
    この場合、機密情報の列だけを除いたビューBを定義しておく。DCLのGRANT文を使って、一般の利用者に対しては「テーブルAはアクセス禁止、ビューBは許可」という設定を行なうことで、データ参照を許可する範囲を利用者の立場に応じて適切に設定することができる。

ビューの制約とデメリット

ビューは単なる「名前をつけたSELECT文」でしかない

→ ビューは仮想的なテーブルに過ぎず、データを内部に持っているわけではないため

※ ビューに対してはいくつかの条件をクリアしないとSELECT文以外を使用することはできない

DBMSにSQL文を送信するときは簡単そうに見えるが、実際の内部ではビューを展開することによって複雑で冗長なSQLになることもあり、負荷の高い処理をDBMSに課してしまうこともある点に注意が必要

マテリアライズド・ビュー(materialized view)

SELECT文による検索結果をキャッシュしているテーブルのようなもの
データの実体を持っている分ディスク容量を消費するが、テーブルを経由することなくデータを直接参照することができるため高速に動作する

通常のビューは実体を持たないため、ビューを参照するたびに実際にデータを持っているテーブルへのSELECT文が実行されることから、性能上問題となることがある。その問題を解消するために一部のDBMSで使用できる機能

参考図書

『スッキリわかるSQL入門 第2版』

Discussion