ビューの作成と削除

広告

SQLiteではビューと呼ばれる機能が用意されています。ビューは作成済みのテーブルの中のカラムやデータ取得の条件を指定して作成した仮想的なテーブルのことです。ここではビューの作成や利用方法、そして必要なくなったビューの削除方法について解説します。

1.ビューの作成
2.ビューから取得できるデータについて
3.ビューへのデータ追加や削除
4.作成済のビュー一覧の表示
5.ビューの削除

ビューを作成するには次の書式を使用します。

CREATE VIEW ビュー名 AS SELECT文;

ASの後に記述されたSELECT文を使って既存のテーブルに含まれるカラムや条件などを指定します。例えば次のような使い方となります。

create view myview as select name, price from product where price > 3000;

このようにビューはテーブルの中の一部分だけを取り出しあたかも別のテーブルのように扱うことができるようにしたものです。あとでご説明しますが、ビューからはテーブルと同じようにデータを取得することができますが、ビューを使ってデータの更新や追加はできません。

では実際にビューを作成してみます。まずは元になるテーブルを次のように作成しました。

create table user(id integer, name text, address text, old integer);

p1-1

データをいくつか追加します。

p1-2

ではこのテーブルを元にビューを作成してみます。今回は次のようなビューを作成しました。

create view tokyouser as select id, name from user where address = 'Tokyo';

p1-3

作成したビューは「user」テーブルの「id」と「name」カラムを持ち、データとして「user」テーブルの「address」カラムの値が「Tokyo」と一致するデータだけを持っています。(後で解説しますが実際にはデータを持っているわけではありません)。

それでは作成したビューからデータを取得してみます。

select * from tokyouser;

p1-4

テーブルと同じようにビューからデータを取得することができました。なおビューからデータを取得することは、ビューの元になっているテーブルから次のようにデータを取得した場合と同じです。

select id, name from user where address = 'Tokyo';

p1-5

適切なビューを作成しておけば、何度も利用するような複雑なSQL文を覚えておく必要がなくなります。

ビューはどのようなデータを元のテーブルから取得するのかについて定義をしているだけで、データそのものは持っていません。ビューからデータを取得すると、その都度現在のテーブルのデータから条件に合うデータを取得します。その為、ビューに対して同じSQL文を実行しても元のテーブルのデータが変わっていると異なる結果となる可能性があります。

実際に試してみます。現在元になっているテーブルに次のようなデータが格納されています。

p1-6

作成済のビューからデータを取得します。

p1-7

それではビューの元になっているテーブルにデータを1つ追加した上で、再びビューからデータを取得してみます。するとビューから取得できるデータが増えています。

p1-8

このようにビューはビュー自身でデータを保持しているわけではなく、元になっているテーブルのものを都度取得していることに注意して下さい。

ビューからデータを取得することはできますが、ビューに対してデータの追加や削除、データの更新といった処理を行うことはできません。

実際に試てみると次のように「Error: cannot modify tokyouser because it is a view」のようなエラーが表示されます。

p1-9

作成済みのビューの一覧だけを確認する方法はありませんが、SQLiteコマンドの「.tables」を実行すると作成済のテーブルに加えてビューも合わせて表示されます。

p1-10

またSQLiteの特別なテーブルである「sqlite_master」テーブルから次のように作成済のビューの名前や作成された時のSQL文を取得することもできます。

select name, sql from sqlite_master where type = 'view';

p1-11

作成済みのビューを削除するには次の書式を使います。

DROP VIEW ビュー名;

ビューを削除しても元になっているテーブルやテーブルに格納されているデータには影響しません。

それでは実際に試してみます。次のようにビューを削除しました。

drop view tokyouser;

p1-12

ビューを削除した後で改めて「.tables」コマンドを実行してみるとビューが削除されていることが確認できます。

p1-13

このページではビューの作成方法や実際の理由方法について解説しました。

( Written by Tatsuo Ikura )