【SQL】VIEWの基本
データベースにおいてVIEW(ビュー表)とはあるSELECT文の結果を格納、定義した仮想的なテーブルのことです。
SELECT文で、複雑な条件を指定している場合や実行頻度の高いものをあらかじめひとつのテーブルとして保存しておくことで、操作の簡素化や元のテーブルにアクセス権限のないユーザへ限定的な情報の開示などを行うことが可能となります。
VIEWで作成したテーブルは仮想的なものであるため実際のデータが保存されているわけではなく、VIEWを参照する度に裏側の処理で元にしたSELECTが実行される仕組みとなっています。
VIEWの作成
以下のSQLでVIEWの作成を行うことができます。
CREATE VIEW (ビュー表名称) AS
SELECT (取得カラム名..). FROM (元のテーブル)(以降、抽出条件等)
CREATE VIEW human_cinema AS
SELECT url, title, updated_at FROM movies WHERE theater_id = 1;
ビュー表に列の別名を定義する
以下のように記述すると、元のテーブルのカラム名に対してビュー表で別な名前を指定できます。
CREATE VIEW human_cinema(ページURL, タイトル, 更新日時) AS
SELECT url, title, updated_at FROM movies WHERE theater_id = 1;
また、元の表を指定する際、抽出条件の他に結合や統合を使って複数のテーブルをまとめることもできます。
(例)JOINを使って複数のテーブルをひとつのビュー表にまとめる
CREATE VIEW human_cinema(ページURL, タイトル, 更新日時, 劇場) AS
SELECT url, title, updated_at, theaters.name
FROM movies JOIN theaters ON movies.theater_id = theaters.theater_id
WHERE movies.theater_id = 1;
VIEWの操作
作成したビュー表は通常のテーブルのように参照することができます。
前述のとおり作成したビュー表からSELECTで抽出した結果
SELECT * FROM human_cinema;
+--------------------------------------------------+------------------------------------------------+---------------------+--------------------------------------------+
| ページURL | タイトル | 更新日時 | 劇場 |
+--------------------------------------------------+------------------------------------------------+---------------------+--------------------------------------------+
| https://ttcg.jp/human_shibuya/movie/0807900.html | ちょっと思い出しただけ | 2022-02-26 17:38:04 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0784800.html | 真・事故物件/本当に怖い住民たち | 2022-02-26 17:38:07 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0829200.html | 愛国女子―紅武士道 | 2022-02-26 17:38:11 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0833400.html | ホテルアイリス | 2022-02-26 17:38:15 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0827100.html | ドリームプラン | 2022-02-26 17:38:19 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0833500.html | その消失、 | 2022-02-26 17:38:22 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0823000.html | 灰色の壁 ―大宮ノトーリアス― | 2022-02-26 17:38:26 | ヒューマントラストシネマ渋谷 |
| https://ttcg.jp/human_shibuya/movie/0815600.html | Ribbon | 2022-02-26 17:38:29 | ヒューマントラストシネマ渋谷 |
+--------------------------------------------------+------------------------------------------------+---------------------+--------------------------------------------+
また、ビュー表に対しては通常のテーブルのように更新(UPDATE)や削除(DELETE)を行うこともでき、結果はビューの元になったテーブルにも自動的に反映されます。
ただし、集約関数などで抽出した行に対しては更新不可となります。
(抽出の元となった行を特定できないため)
作成したVIEW自体を削除する場合はDROP VIEW文を使って行います。
DROP VIEW (ビュー名)