SQL DDL:View定義
目次
概要
Viewとは
間接的に参照する仮想の表。
DML文自体。データは保持しない。
利点
(1)複雑な問い合わせ文を簡潔に実行できる。
複数の表を結合したり副問い合わせを駆使した複雑な問い合わせをViewとして作成しておくと楽。
DML文
Select A,B,C From 表 Left Join ~ Where ~
↑と同じView
Select * From View-表
(2)アクセス制御
個人情報等、見せなくないデータを選別し(Viewを作成し)、
ユーザー毎に参照権限を設定しセキュリティを高められる。
Create View
(副問い合わせ)
Create View View名(列名・・・) As Select 列名 From 表名 Where ~
Viewの参照元が存在しない場合はエラー(デフォルト)
Create NoForce View ~
参照元テーブルが無い場合の定義
Viewの参照元が存在しなくてもViewを作成する
Create Force View ~
既存のViewがある場合に上書き(AlterTableと同等)
無い場合は新規作成
Create Or Replace View ~
マテリアライズド・ビュー
実データのコピーを格納したビュー
ある時点のデータでしかないので元テーブルのレコードが変化する度にビューを作成し直す必要がある。
単一/複合ビュー
単独ビュー | 複合ビュー | |
---|---|---|
元表の数 | 1 | 複数 |
GroupBy | × | ○ |
関数 | × | ○ |
INSERT UPDATE DELETE |
○ | 条件付き○ |
ビューに対するデータ操作
DELETE | UPDATE | INSERT | |
---|---|---|---|
グループ関数 | × | × | × |
GroupBy | × | × | × |
Distinct | × | × | × |
RowNum | × | × | × |
式によって 定義された列 |
○ | × | × |
ビューによって 選択されていない NotNull制約列 |
○ | ○ | × |
Drop View
属性
CHECK OPTION
Create View View名 Select ~ Where 列名 = 10
WITH CHECK OPTION
↑ のビューに対して
Update View名 Set 列名 = 20
はエラー
READ ONLY
Create View View名 Select ~
WITH READ ONLY
↑ のビューに対して
Update View名 Set ~br/>
はエラー
Viewに対するCRUD/DML操作
しかしViewが主キーを持っていない場合に、
Viewに対してInsertの処理を行うとPRIMARY KEY制約違反となる。
スキーマ
SQLServerにおけるDB名
スキーマ毎にテーブル、Index、View等を定義できる。
スキーマが違えば同名のテーブル、Index、Viewを定義できる。
Oracle
インスタンス1
スキーマ1:テーブル1~3、Index、View
スキーマ2:テーブル1~2、Index、View
インスタンス2
スキーマ1:テーブル1~2、Index、View
スキーマ2:テーブル1~5、Index、View
スキーマ3:テーブル1~3、Index、View
スキーマを指定した問い合わせ
Select * From スキーマ名.表名