ビューとは
複数テーブルからの問い合わせでテーブルの結合 STATUS NATURAL JOIN AFF をしばしば使って面倒だったろう。あらかじめ結合テーブルが容易出来れば便利である。これを実現するのがビュー(VIEW)である。基本的に読み込みしかできない。更新可能なビューの概念もあるが、更新に制限はあるし、実装されていないこともある。また、ビューを使わせることによって、ユーザにアクセスさせたくない情報を保護することもできる。ビューを定義する命令は以下の通りである。
CREATE VIEW ビュー名 AS 問い合わせ ;
例えば、次のようにすれば STATUS NATURAL JOIN AFF と同等の内容をもつビューを SA_VIEW の名前で定義できる。
CREATE VIEW SA_VIEW AS SELECT STATUS.NAME AS NAME, LEVEL, SKILL, TEAM FROM STATUS NATURAL JOIN AFF ;
ここで、NAME は STATUS.NAME と AFF.NAME があり紛らわしいので、AS NAME と明確にしておいた。問い合わせにおいて、SELECT * FROM SA_VIEW ; のようにビューはテーブルと同じ扱いができる。ビューの削除は DROP VIEW SA_VIEW ; のようにすれば良い。
更新の影響
ビューは定義後も元のテーブルの変更により内容が変わる。このことを課題を解きながら確認していこう。課題のためにテーブル S_TEST, A_TEST を作成し直す。そのために次の命令を実行して欲しい。
DROP TABLE S_TEST ; DROP TABLE A_TEST ; CREATE TABLE S_TEST( NAME TEXT PRIMARY KEY, LEVEL INTEGER NOT NULL DEFAULT 0, SKILL TEXT, CHECK( 0 <= LEVEL ), CHECK( LEVEL <= 5 ) ) ; CREATE TABLE A_TEST( NAME TEXT, TEAM TEXT, PRIMARY KEY ( NAME, TEAM ), FOREIGN KEY ( NAME ) REFERENCES S_TEST( NAME ) ) ; INSERT INTO S_TEST VALUES ( '御坂美琴', 5, 'レールガン' ) ; INSERT INTO S_TEST VALUES ( '上条当麻', 0, 'イマジンブレイカー' ) ; INSERT INTO S_TEST VALUES ( '初春飾利', 1, 'サーマルハンド' ) ; INSERT INTO A_TEST VALUES ( '御坂美琴', '常盤台中' ) ; INSERT INTO A_TEST VALUES ( '初春飾利', '柵川中' ) ;
課題
テーブル S_TEST, A_TEST の自然結合から NAME, LEVEL, TEAM を抜き出したビュー SA_TEST を定義せよ。
解答例
CREATE VIEW SA_TEST AS SELECT S_TEST.NAME AS NAME, SKILL, TEAM FROM S_TEST NATURAL JOIN A_TEST ;
(別解)CREATE VIEW SA_TEST AS SELECT S_TEST.NAME AS NAME, SKILL, TEAM FROM S_TEST, A_TEST WHERE S_TEST.NAME = A_TEST.NAME ;
SELECT * FROM SA_TEST ; の結果は次のようになる。
NAME | SKILL | TEAM |
---|---|---|
御坂美琴 | レールガン | 常盤台中 |
初春飾利 | サーマルハンド | 柵川中 |
元テーブル A_TEST にデータを追加する。
INSERT INTO A_TEST VALUES ( ‘初春飾利’, ‘ジャッジメント’ ) ;
SELECT * FROM SA_TEST ; の結果に (初春飾利, サーマルハンド, ジャッジメント) が追加されているのが確認できるはずである。