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 ~
(副問い合わせ)
Create View View名(列名・・・) As Select 列名 From 表名 Where ~

Viewの参照元が存在しない場合はエラー(デフォルト)
Create NoForce View ~

参照元テーブルが無い場合の定義
Viewの参照元が存在しなくてもViewを作成する
Create Force View ~

既存のViewがある場合に上書き(AlterTableと同等)
無い場合は新規作成
Create Or Replace View ~

マテリアライズド・ビュー

実データのコピーを格納したビュー
ある時点のデータでしかないので元テーブルのレコードが変化する度にビューを作成し直す必要がある。

Create Materialized View View名 As Select 列名 From 表名 Where ~

単一/複合ビュー

 単独ビュー   複合ビュー 
元表の数  1 複数
GroupBy ×
関数 ×
INSERT
UPDATE
DELETE
条件付き○

ビューに対するデータ操作

 DELETE   UPDATE   INSERT 
グループ関数 × × ×
GroupBy × × ×
Distinct × × ×
RowNum × × ×
式によって
定義された列
× ×
ビューによって
選択されていない 
NotNull制約列
×

Drop View

Drop View 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に対してもテーブルと同様にSelect/Insert/Update/Deleteは行える。
しかし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 スキーマ名.表名