【SQL】View(ビュー)とはなにか?動作確認してみる。

ビューとは?

ビューは 実体のデータとしては存在しない。 ビューの実体は「SELECT文」であり、ビュー作成時に実行したいSELECT文を定義する。

実際にviewを作成し動作確認してみる

postgresql環境構築

docker-compose.yml

version: "2"
services:
  postgres:
    image: postgres:13-alpine
    environment: 
      POSTGRES_DB: test
      POSTGRES_PASSWORD: example

上記ファイルを利用してpostgres環境を構築

$ docker-compose up -d

動作確認

# postgresコンテナに入る
$ docker-compose exec postgrs sh

# postgresコンテナ内でpsqlコマンドを使ってpostgresを利用する
$ psql -U postgres -d test
psql (13.3)
Type "help" for help.

test=#

testデータベース内で検証

以下のように randomテーブルをselectした結果同士をunionしたものをview_testというviewとして作成する。

-- テストデータ作成参考: https://goodbyegangster.hatenablog.com/entry/2019/05/06/111009
create table random (code int);
insert into random (code)
    select (random() * 100) from generate_series(1, 10);

CREATE OR REPLACE VIEW view_test as
select * from random
UNION ALL
select * from random
;

作成したビュー (view_test)を参照してみると、20件のデータが取得できていることがわかる。

 test=# select * from view_test ;

 code
------
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
(20 rows)

これはview作成時に定義したselect文と同様の結果が出力される。

test=# select * from random
test-# UNION ALL
test-# select * from random;

 code
------
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
(20 rows)

次にrandomテーブルに新しいデータを投入してみて、viewを参照したときにどの様になるかみてみる。

test=# insert into random (code)
test-#     select (random() * 100) from generate_series(1, 10);
INSERT 0 10

viewを参照してみる。

test=# select * from view_test ;
 code
------
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
   96
   16
   49
   70
   60
   41
   15
   22
   75
   77
   31
   69
   18
   20
    4
   47
   85
   82
    4
   63
   96
   16
   49
   70
   60
   41
   15
   22
   75
   77
(40 rows)

まとめ

  • ビューの実体はデータではなくselect文である。
    • select文の参照先のテーブルにデータが増えるたびにviewの取得結果が変わってくる。
      • view作成時にselect文の処理の結果が保存されるわけではない。