SQLite | ビュー | ビューを作成する

ビューは選択カラムと検索条件で定義する仮想テーブルです。ここではビューの作成と利用方法を説明します。

ビューを作成する

次の構文でビューを作成します。

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);
sqlite> create table user (id integer, name text, address text, old integer);
sqlite> 

テーブルにデータを追加します。

insert into user values (1, 'devkuma', 'Seoul', 23);
insert into user values (2, 'kimkc', 'Busan', 19);
insert into user values (3, 'araikuma', 'Seoul', 38);
insert into user values (4, 'happykuma', 'Seoul', 24);
insert into user values (5, 'mykuma', 'Daejeon', 18);
sqlite> insert into user values (1, 'devkuma', 'Seoul', 23);
sqlite> insert into user values (2, 'kimkc', 'Busan', 19);
sqlite> insert into user values (3, 'araikuma', 'Seoul', 38);
sqlite> insert into user values (4, 'happykuma', 'Seoul', 24);
sqlite> insert into user values (5, 'mykuma', 'Daejeon', 18);
sqlite> 

seouluserというビューを作成します。

create view seouluser as select id, name from user where address = 'Seoul';
sqlite> create view seouluser as select id, name from user where address = 'Seoul';
sqlite>

このビューはaddressSeoulの行について、useridnameを公開します。データ自体は保持しません。

ビューを検索します。

select * from tokyouser;
sqlite> select * from seouluser;
1|devkuma
3|araikuma
4|happykuma

ビューはテーブルと同様に検索でき、元のSELECTと同じ結果になります。

select id, name from user where address = 'Tokyo';
sqlite> select id, name from user where address = 'Seoul';
1|devkuma
3|araikuma
4|happykuma
sqlite> 

ビューを使うと必要なデータを簡単に検索できます。

ビューが返すデータ

ビューが保存するのは検索定義だけで、データ自体ではありません。検索のたびに元テーブルの現在のデータを読むため、元データが変わると結果も変わります。

現在の元データを確認します。

select * from user;
sqlite> select * from user;
1|devkuma|Seoul|23
2|kimkc|Busan|19
3|araikuma|Seoul|38
4|happykuma|Seoul|24
5|mykuma|Daejeon|18

ビューを検索します。

select * from seouluser;
sqlite> select * from seouluser;
1|devkuma
3|araikuma
4|happykuma

元テーブルにデータを追加して再度ビューを検索すると、新しい一致行も表示されます。

insert into user values (6, 'yourkuma', ' Seoul', 17);
sqlite> insert into user values (6, 'yourkuma', ' Seoul', 17);
sqlite> 
sqlite> select * from seouluser;
1|devkuma
3|araikuma
4|happykuma
6|yourkuma
sqlite> 

ビューは独自のデータを持たず、常に元テーブルを参照します。

ビュー経由の追加・更新・削除

このビューは検索できますが、追加、削除、更新はできません。

変更を試みるとError: cannot modify seouluser because it is a viewになります。

insert into seouluser values (8, 'kuma');
sqlite> insert into seouluser values (8, 'kuma');
Error: cannot modify seouluser because it is a view
sqlite> 

ビューの一覧を確認する

.tablesはテーブルとビューの両方を表示します。

.tables
sqlite> .table
seouluser  user     
sqlite> 

sqlite_masterを検索すると、ビュー名と定義SQLを取得できます。

select name, sql from sqlite_master where type = 'view';
sqlite> select name, sql from sqlite_master where type = 'view';
seouluser|CREATE VIEW seouluser as select id, name from user where address = 'Seoul'
sqlite>