SQL入門 第6回 ビューについて

前回は「テーブル結合」というテーマで、テーブルの外部結合や内部結合、UNIONについての説明を行いました。

今回は「ビューについて」というテーマになります。

ビューとは

ビューとは簡単に説明すると

あらかじめ定義したSELECT文でテーブルの内容を取得するためのDBオブジェクト

のことです。

テーブルとは異なり、ビューそのものにデータはありません。

あくまで、「テーブルを取得するSELECT文に名前をつけて定義したもの」というイメージです。

ビューのメリット

ビューのメリットは主に2つです。

  1. 複雑なクエリをビューとして定義することで、データの抽出が簡単になる
  2. ユーザーにテーブルを直接参照させずにビューのみに参照権限を与えることでセキュリティが向上する

主に1つ目の理由であることが多いです。

大きなシステムの開発をしていると複雑なクエリを複数の箇所で記述する必要があることが多く、ビューを作成しておくことで、開発の無駄な手間を省くことが出来ます。

また、システム改修時にそれぞれのクエリを修正するのではなくビューのみを修正すれば済むという保守面でのメリットもあります。

ビューのデメリット

ビューのデメリットは主に2つです。

  1. テーブル名やカラム名の変更時にビューも変更が必要になる
  2. 多用しすぎるとデータ構造が分かりづらくなり、クエリが重くなることもある

設計後・実装後にテーブル名やカラム名を変更することはあまりないと思います。

主なデメリットとしては2つ目になるでしょう。プログラムを他人のプログラムをおっかけてみているときにビューで記載されているとワンクッション確認する手間が増えるので、可読性に難点があると言えます。(可読性と言うよりはやはり分かりやすさでしょうか)

あとは、ビューの定義にビューを使ったり、複雑にしすぎるとビューのSELECT結果を得るのにすごく時間がかかってしまう場合があります。

ビュー作成時の注意点としては、あまり複雑なクエリにし過ぎないと言うことです。

ビューの作成方法

ビューを作成するにはテーブルやデータベースを作成するときと同様、CREATE文を使用します。

以下、ビューのCREATE文の構文です。

CREATE VIEW ビューの名前 AS
[SELECT 文]

例えば、以下のように生徒マスタと部活マスタがあったとします。

この2つのテーブルから、生徒の姓名と部活の関係を一目でわかるビューを作成するには、以下のように記述します。

CREATE VIEW SEITO_BUKATSU AS
SELECT
    姓, 名, 部活名
FROM
    生徒マスタ
INNER JOIN
    部活マスタ
    ON 生徒マスタ.所属部活コード = 部活マスタ.部活コード

この作成したビューに対してSELECTを実行すると以下のようになります。

SELECT * FROM SEITO_BUKATSU

また、ビューに対してWHEREやGROUP BYのような条件指定等を行うことも可能です。

SELECT * FROM SEITO_BUKATSU
WHERE 部活名 = '料理部'

練習問題

問題

Q1.以下のようなテーブル群がある。

社員の名前とその人が保持している権限の名前が一目でわかるビューを作成せよ。



答え

A1.

CREATE VIEW 権限確認ビュー AS
SELECT
    社員マスタ.名前, 権限マスタ.権限名
FROM
    社員マスタ
LEFT JOIN
    社員権限
    ON 社員マスタ.社員番号 = 社員権限.社員番号
LEFT JOIN
    権限マスタ
    ON 社員権限.保持権限 = 権限マスタ.権限ID

第6回「ビューについて」は以上です。

次回第7回は「トランザクションについて」です。

→SQL学習の入門・初心者にオススメの書籍3選