ビューってなに?
VIEWのデータの更新ってできるの?
わかりやすく教えて欲しい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
VIEWとは?
VIEWはテーブルとほぼ同じですが、実際のデータが保存されていないという特徴があります。
テーブルというのはデータがコンピュータ内の記憶装置(ハードディスク)に保存されています。
一方、VIEWはデータ自体は保存されておらず、SELECT文が保存されています。
VIEWからデータを取り出そうとする場合、VIEWは内部的にそのSELECT文を実行し一時的に仮想テーブルを作ります。
ビューを作成することのメリットは次の通りです。
VIEWの元になっているデータはテーブルにあるのでテーブルが更新されるとビューにも反映されます。
ビューの作り方
VIEWを作成するにはCREATE VIEW文を使います。
CREATE VIEW文の構文は次の通りです。
CREATE VIEW <ビュー名> (<列名1>, <列名2>,・・・)
AS
<SELECT文>
ASキーワード後にはSELECT文を記述します。
VIEWの列とSELECT文で指定した列の順は一致します。
例えば次のようなテーブルがあったとします。
shohin_id | shohin_mei | shohin_bunrui | kakaku |
‘0001’ | ‘鉛筆’ | ‘事務用品’ | 100 |
‘0002’ | ‘ボールペン’ | ‘事務用品’ | 100 |
‘0003’ | ‘Tシャツ’ | ‘衣類’ | 1000 |
‘0004’ | ‘鍋’ | ‘キッチン用品’ | 2000 |
‘0005 | ‘包丁’ | ‘キッチン用品’ | 1500 |
‘0006’ | ‘帽子’ | ‘衣類’ | 1500 |
このテーブルからshohin_bunruiごとの合計kakakuを表示するビューを作成したいとすると次のようなCREATE VIEW文になります。
CREATE VIEW shohin_sum (shohin_bunrui, kakaku_sum)
AS
SELECT shohin_bunrui, SUM(kakaku) FROM shohin GROUP BY shohin_bunrui;
実行すると次のようなVIEWが作成されます。
shohin_bunrui | kakaku |
‘事務用品’ | 200 |
‘衣類’ | 2500 |
‘キッチン用品” | 3500 |
ビューに対する検索
ビューからデータを取得する場合はSELECT文のFROM句にビューを指定します。
SELECT * FROM shohin_sum;
shohin_sumはビューなのでビューに定義されたSELECT文が実行された後に、その結果に対してもう一度SELECT文を実行します。
このようにビューに対してSELECTを行う場合は内部では複数回SQLが実行されます。
VIEWからVIEWを作成することも可能ですが、多段ビューにするとパフォーマンスの低下につながるので極力VIEWからVIEWを作成することは避けましょう。
ビューの更新
ビューは実際のデータを保持していないと述べました。
それではINSERT、DELETE、UPDATEといった更新系のSQLは実行できるのでしょうか?
これについてはビュー定義のSELECT文においていくつかの条件を満たしている場合ビューに対する更新が可能となっています。
代表的な条件を挙げると次のようなものがあります。
- SELECT句にはDISTINCTが含まれていない
- FROM句に含まれるテーブルが一つだけである
- GROUP BY句を使用していない
- HAVING句を使用していない
ビューの削除
ビューを削除するにはDROP VIEW文を使います。
DROP VIEW文の構文は次の通りです。
DROP VIEW <ビュー名>;
データベースのビューとは?まとめ
解説の内容をまとめます。
- ビューは実際のデータが保存されていない
- ビューにはSELECT文が保存されている
- CREATE VIEW文でビューを作成する
- DROP VIEW文でビューを削除する
以上、お疲れ様でした。
コメント