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>
このビューはaddressがSeoulの行について、userのidとnameを公開します。データ自体は保持しません。
ビューを検索します。
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>