SQL ビューを作成/使用するサンプル

SQLのビューを作成/使用するサンプルです。

確認環境
・Oracle Express Edition 11g Release 2

目次

説明 ビュー(view)
サンプル ビューを作成する(create)
  ビューの値を更新する(insert/update/delete)
  ビューを削除する(drop)
  ビューを確認する(USER_VIEWS)

ビュー(view)

  • ビューは、1つ以上の表を元にした実体を持たない表のことです。
  • 表の中の一部の列のみ表示したい場合や列の別名を表示したいときなどで使用します。
  • 表を結合して1つのビューにすれば、都度結合して検索する必要がなくなります。
  • ビューに対して更新は可能です。その場合、元の表にも反映されます。
  • ビューの元の表は、実表と呼ばれます。
  • ビュー(view)は、見るという意味です。
  • 以下は、Oracleのビューのリンクです。
    https://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_8004.htm

ビューを作成する(create)

ビューを作成するサンプルです。

以下、2つのテーブルがあるとします。

SYOUHINテーブル
ID NAME CATEGORY
1 りんご フルーツ
2 みかん フルーツ
3 にんじん 野菜
SALESテーブル
ID KOSUU SALESDATE
1 5 20200301
3 3 20200301

上記2テーブルからTestView1というビューを作成します。

CREATE OR REPLACE VIEW TestView1 AS
	SELECT
		a.id,
		a.name,
		b.kosuu
	FROM SYOUHIN a
		inner join SALES b 
		on a.id = b.id;

1行目のTestView1は、作成するビュー名です。
OR REPLASEは任意です。REPLASEは交換するという意味でviewを変更できます。
2~8行目は、select文でSYOUHINテーブルとSALESテーブルからビューを作成します。

ビューから値を取得する

select * from TestView1;

上記のselect文を実行すると以下の結果を取得できます。

ID NAME KOSUU
1 りんご 5
3 にんじん 3

2つのテーブルにある項目をまとめて表示します。
SQLで結合するjoinを記述する必要はありません。

ビューを読み取り専用にする場合

CREATE OR REPLACE VIEW TestView1 AS
	SELECT
		a.id,
		a.name,
		b.kosuu
	FROM SYOUHIN a
		inner join SALES b 
		on a.id = b.id
with read only;

9行目のようにwith read onlyを付けます。

ビューを更新する(insert/update/delete)

ビューを更新するサンプルです。

以下、2つのテーブルがあるとします。

SYOUHINテーブル
ID NAME CATEGORY
1 りんご フルーツ
2 みかん フルーツ
3 にんじん 野菜
SALESテーブル
ID KOSUU SALESDATE
1 5 20200301
3 3 20200301

ビューです。

select * from TestView1;
ID NAME KOSUU
1 りんご 5
3 にんじん 3

ビューに対してupdateした場合

ビューに対してupdateした場合です。

update TestView1
set NAME = 'ばなな'
where id = 1;

以下は、実行結果です。

SYOUHINテーブル
ID NAME CATEGORY
1 ばなな フルーツ
2 みかん フルーツ
3 にんじん 野菜
SALESテーブル
ID KOSUU SALESDATE
1 5 20200301
3 3 20200301

ビューです。

select * from TestView1;
ID NAME KOSUU
1 ばなな 5
3 にんじん 3

表には存在するがビューには存在しないIDを指定した場合

update TestView1
set NAME = 'ばなな'
where id = 2;

ビューに対して存在しないIDを指定しても何も更新されません。

ビューに対してinsertした場合

ビューに対してinsertできます。

insert into TestView1
(id,name)
values (4,'オレンジ');

以下は、実行結果です。

SYOUHINテーブル
ID NAME CATEGORY
1 ばなな フルーツ
2 みかん フルーツ
3 にんじん 野菜
4 オレンジ null
SALESテーブル
ID KOSUU SALESDATE
1 5 20200301
3 3 20200301

ビューです。

select * from TestView1;
ID NAME KOSUU
1 ばなな 5
3 にんじん 3

このサンプルで追加したデータはビューの表示の条件に合致しないのでビューには表示されません。

ビューから複数の表に対してinsertしようとした場合

insert into TestView1
(id,name,kosuu)
values (4,'オレンジ',9);

ORA-01776: 結合ビューを介して複数の実表を変更できません。のエラーが発生します。

ビューに対してdeleteした場合

ビューに対してdeleteできます。

delete from TestView1
where id = '1';

以下は、実行結果です。

SYOUHINテーブル
ID NAME CATEGORY
2 みかん フルーツ
3 にんじん 野菜
4 オレンジ null
SALESテーブル
ID KOSUU SALESDATE
1 5 20200301
3 3 20200301

ビューです。

select * from TestView1;
ID NAME KOSUU
3 にんじん 3

表には存在するがビューには存在しないIDを指定した場合

delete from TestView1
where id = '2';

ビューに対して存在しないIDを指定しても何も更新されません。

ビューを削除する(drop)

ビューを削除するサンプルです。

drop view TestView1;

drop viewとビュー名を指定します。

ビューを確認する(USER_VIEWS)

ビューを確認するサンプルです。

select * from USER_VIEWS
where VIEW_NAME = 'TESTVIEW1';

USER_VIEWSテーブルで作成したビューを確認できます。

関連の記事

SQL シーケンス(順序)を作成/使用するサンプル
SQL シノニムを作成/使用するサンプル

△上に戻る