
データベースを仕事で使っていながら、CREATE VIEWという機能をこれまで全く知りませんでした。
仕事メンバーの人から教えてもらって、比較的データの多い定期バッチ処理や、
複数テーブルなど、複雑なデータ構造の場合に、非常に便利に使える機能ということらしいです。
一体この機能どんなものなの?
という個人的興味も含めて、実際に使って試したわけではないですが、
現時点で分かったことをブログにまとめておきたいと思います。
なんと、SQLを使う上で、知らないと恥ずかしいレベルの機能だったらしいので、
急いで調べたんですが、この機能知らない人は、このブログを参考にして自己学習を進めてくださいまし。
SQLのCREATE VIEWとはどんな機能?
簡単に説明すると、仮想のテーブルを作って、何度も複雑な集計をしなくていいようにする機能。
要するに、「SQLの再利用・簡略化・制御のために、SELECT文にラベルをつけて保存する仕組み」です。
そして、特徴は以下の通りです。
複雑なSELECTを名前付きで保存できる機能
長いSQLを毎回書かなくていい。
仮想テーブルを作る機能
実データは持たず、呼び出すときに元テーブルから結果を生成する。
再利用・可読性向上のための仕組み
ビュー名を使うだけで定義済みのSELECTを呼び出せる。
セキュリティや制限にも使える
特定の列や条件を固定して公開したいときに役立つ(例:社員テーブルから給与列を除いたビュー)。
使い方
CREATE VIEWのSQLクエリサンプルです。
作成
CREATE VIEW @VIEWテーブル名 AS
SELECT ...
SELECT ... の箇所に、仮想テーブルに登録したい複雑な実際のテーブルからの取得データを記述します。
削除
CROP VIEW @VIEWテーブル名
呼び出し(参照)
普通のテーブルのように扱うことができます。
SELECT * FROM @VIEWテーブル名
作られたVIEW TABLEの一覧取得
SQLタイプによって、一覧の習得方法が違います。
MYSQLの場合
SELECT TABLE_NAME, VIEW_DEFINITION
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = '@データベース名';
または
SHOW FULL TABLES IN @データベース名 WHERE TABLE_TYPE = 'VIEW';
SQLiteの場合
SELECT name, sql
FROM sqlite_master
WHERE type = 'view';
PostgreSQL の場合
SELECT viewname, definition
FROM pg_views
WHERE schemaname NOT IN ('pg_catalog', 'information_schema');
Oracle の場合
SELECT view_name, text
FROM user_views;
作って、削除するまで保持しておけるのは、とても便利です。
データを元に、動的マスターテーブルなどを作るのに役立ちそうですね。
ちなみに、一度作ったCREATE VIEWテーブルのデータを更新するのは、できる場合とできない場合、PostgreSQLは全く変更不可など、
環境によって条件が異なるので、変更するぐらいなら、作り直すという方が、運用効率良さそうですね。
使えるSQLタイプ
一般的な、MYSQL、POSTGRESQL、SQLITE、他のSQLでも使えるようです。
SQLITEでも使えるのは、非常にありがたいですね。
そして知らなかったら損な機能であることもよくわかりました。
ちなみに、SQLの種類別に、CREATE VIEWが使えるようになったバージョンを調べておきました。
MYSQL
MySQL 5.0 (2005年リリース) から利用可能。
それ以前(4.x 系など)にはビューは存在せず、すべてサブクエリやJOINで書く必要がありました。
SQLite
SQLite 3.0 (2004年頃リリース) からサポート。
ただし更新可能ビューはサポートされず、INSTEAD OF トリガーで実現する必要があります。
PostgreSQL
最初期(PostgreSQL 6.0, 1997年頃) からビューはサポート済み。
かなり昔からある基本機能。
Oracle Database
Oracle 6 (1988年リリース) からビューをサポート。
商用DBの中では歴史が古く、早期から実装済み。
Microsoft SQL Server
SQL Server 6.0 (1995年リリース) からビューをサポート。
標準SQLに沿った形で利用可能。
あとがき
毎回、クソほど長いクエリを書いて、嫌気がさしていたエンジニア諸君。
CREATE VIEWを使って、便利に、安全に、高速に、処理をこなしましょう。
そして、自分の脳内にも、記憶CREATE VIEWが欲しくなった、今日のブログ記事執筆でした。
実際に使ってみて、その感想なども次回以降に書いてみたいと思います。
0 件のコメント:
コメントを投稿