【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文の処理の結果が保存されるわけではない。
- select文の参照先のテーブルにデータが増えるたびにviewの取得結果が変わってくる。