ビューの作成・削除。ビューは読取専用。
成果物
構文
- create view as
- create view if not exists as
- create temp view as
- create view スキーマ名.表名(列名,...) as
- drop view
- drop view if exists
テーブル・ビュー・インデックスの違い
以下のような違いがある。合っているかはわからない。
DBオブジェクト | 違い | 目的 |
---|---|---|
テーブル | 物理バイナリ | 永続化 |
インデックス | ソートしたテーブルを物理バイナリやメモリに保持する | select 高速化 |
ビュー | テーブルから抽出した読取専用のデータセット。物理的には存在しない | 特定クエリの短縮 |
仮想テーブル | そもそもRDBMS上のデータではない。そうみせかけるための仮想化システム。C言語で実装する。 | 何かを仮想化してSQLで操作する |
create view as
create table T(A integer); insert into T values(-2),(-1),(0),(1),(2),(3),(4); create view positive_T as select * from T where 0<A; select * from positive_T;
1 2 3 4
sqlite_master
表に追加される。
.headers on select * from sqlite_master where type='view';
type|name|tbl_name|rootpage|sql view|positive_T|positive_T|0|CREATE VIEW positive_T as select * from T where 0<A
create view if not exists as
同名のビューを作成しようとすると以下エラーが出る。
Error: table ビュー名 already exists
これを回避するのがif not exists
。
create table T(A integer); create view if not exists positive_T as select * from T where 0<A; create view if not exists positive_T as select * from T where 0<A;
create temp view as
スキーマ名temp
にビューを作成する。
create table T(A integer); create temp view positive_T as select * from T where 0<A;
main
スキーマには作られていない。
select count(*) from main.sqlite_master where type='view';
0
temp
スキーマに作られている。
select count(*) from temp.sqlite_master where type='view';
1
create view スキーマ名.表名(列名,...) as
任意のスキーマにビューを作成する。
create table T(A integer); attach ':memory:' as 'mem'; create view mem.positive_T as select * from T where 0<A;
mem
スキーマに作成された。
select count(*) from mem.sqlite_master where type='view';
1
main
,temp
スキーマには作成されていない。
select count(*) from main.sqlite_master where type='view';
0
select count(*) from temp.sqlite_master where type='view';
0
列を任意にできる。
create table T(A integer); insert into T values(1); create view positive_T(B, C) as select A, 1 from T where 0<A;
.headers on select * from positive_T;
B|C 1|1
列名がA
からB
になった。また、スカラー値1
の列を作り、列名をC
とした。
drop view
create table T(A integer); create view positive_T as select * from T; drop view positive_T;
select count(*) from sqlite_master where type='view';
0
drop view if exists
存在しないのに削除しようとすると、以下エラーが出る。
Error: no such view: ビュー名
これをを回避するのがif exists
。
create table T(A integer); create view positive_T as select * from T; drop view positive_T; drop view if exists positive_T;
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)
- SQLite3でTEMPの保存先を指定する
- SQLite3構文 delete
- SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3構文 delete(limit offset, order by)
- SQLite3クエリプランニング(インデックスの働き)
- SQLite3構文 explain
- SQLite構文 expression
- SQLite構文 expression(リテラル)
- SQLite構文 expression(パラメータ)
- SQLite構文 expression(演算子)
- SQLite構文 expression(like 句)
- SQLite構文 expression(glob 句)
- SQLite構文 expression(regexp 句)
- SQLite構文 expression(match 句)
- SQLite構文 expression(is 句)
- SQLite構文 expression(in 句)
- SQLite構文 expression(between 句)
- SQLite構文 expression(case 句)
- SQLite構文 expression(exists 句)
- SQLite構文 expression(サブクエリ)
- SQLite構文 expression(cast)
- SQLite構文 indexed by
- SQLite構文 insert
- SQLite構文 pragma
- SQLite構文 reindex
- SQLite構文 select
- SQLite構文 update
- SQLite構文 vacuum
- SQLite構文 trigger(create/drop)