【例付き】ビュー(View)とは?仕組みとメリット【SQL】

2024年4月15日

当サイトはアフィリエイト広告を利用しています。

DBの世界で利用されるビュー(View)がどんなものか、どんな仕組みで動作するのか、使うことでどんなメリットが得られるのかを解説します。

どんな機能か

ビューは一つまたは複数のテーブルに対するクエリの実行結果を基にした仮想的なテーブルです。

実行結果を物理的にデータとして保存する種類のビュー(マテリアライズドビュー)もありますが、一般的なのは物理的なデータを保存せずクエリ実行時に基となるテーブルからデータを都度取得する種類のビュー(仮想ビュー)です。

実際に作成する例を見ることでイメージがつきやすくなると思いますのでビューを作る例をお見せします。

例1:一つのテーブルを基にしたビュー

CREATE VIEW active_employees AS
SELECT id, name
FROM employees
WHERE status = 'Active';

この例ではemployeesテーブルに対してstatusがActiveなデータのうちidとnameだけを取得した結果をactive_employeesという名のビューとして作成しています。Activeなemployeeを対象にクエリを実行することが分かっているなら、active_employeesを対象にすることで単純なクエリでほしいデータを得られます

例2:複数のテーブルを基にしたビュー

CREATE VIEW employee_department_info AS
SELECT e.id AS employee_id, e.name AS employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

この例ではemployeesテーブルとdepartmentsテーブルを結合させてビューを作成しています。

employeesテーブルのみを対象にした場合だとすべてのカラムの情報を取得しても部門に関する情報はIDしかわからず、具体的にどの部門を指しているのかがすぐにわかりません。しかし上記のビューを利用すれば従業員の名称と部門の名称がどちらも明らかになった結果を単純なクエリで取得できます。

メリット

例の部分でもビューを利用するメリットを少し話しましたが、改めて説明します。

セキュリティ面:ユーザーによって見せるデータを柔軟に設定することが可能になります。例えば、テーブルのデータすべては見せたくないけど、特定のカラムのデータは業務上公開が必要な場合などに役立ちます。基となるテーブルに対する権限とビューの権限は独立して存在しているためにこのようなメリットが生まれます。

複雑なクエリの簡略化:サブクエリなどを利用した複雑なクエリを利用しないと取得できないようなデータもビューとして定義しておくことで簡素なクエリでの取得を可能にします。

正規化されたテーブルは余計なデータを保存する必要がなく管理も容易ですが、レポート作成や調査の時などに必要な情報が欲しいときには結合や条件文を含んだ複雑なクエリ考えないといけないデメリットがあります。しかしビューを利用することでそのデメリットを解消させられます。

実際のテーブルは正規化されているにも関わらず、ビューにより人が扱いやすい形に疑似的なテーブルを作成しておけます。また仮想ビューであればディスクの容量を必要とすることもありません。

ビューは人やハードに優しいとても優れた機能であることを理解していただけたと思います。

仮想ビューを使う上での注意点

とても便利な仮想ビューですが、その仕組み上注意すべき点があります。

ビューに対するクエリの実行時にはビューを作成するための実テーブルに対するクエリも投げられるという点です。もしビューを作成するためのクエリが計算量の多い負荷が高いものであった場合には、ビューに対するクエリが単純であったとしても結果が返ってくるまでにかなり長い時間がかかるかもしれません。ビューの設計にはお気を付けください。

ただしビューは実際にデータを保存しているわけではないために再作成が容易です。

またビューに対してはSELECTだけでなくINSERT、UPDATE、DELETEも利用可能なのですが条件はあります。基となるテーブルが複数ある場合やSUMなどの集合関数を含んだ場合には基本不可です。またこれらに当てはまっていなくても基となるテーブル側の制約やSQLの機能によってはデータ操作が不可なので、システムにビューを通じたデータ操作を組み込むことを考えているなら事前によく検証した方が良いです。

まとめ

とてつもなく便利なビューですが、ビュー自体の設計やクエリをどう設計するかによって性能が大きく変わる少し曲者でもあります。失敗が許されやすい機能なので、設計と検証を繰り返して適切なビューとクエリの設計をできるようになり、快適にデータを扱える環境を作りましょう。

直近でおすすめの本

直近十数冊読んだ中で一番おすすめの本です。

人が行動をするに至るまでのステップを科学的に分析した上で、その結果を習慣と紐付けて解説してくれている本です。

悪い習慣を断ち、良い習慣を継続する方法を詳細に説明してくれています。習慣が人を作っているので、この本の内容を実践できれば人生を大きく好転させられる気がしました。

この本の最初の方に説明があるのですが、複利という考え方があり毎日1パーセントだけの増加でもそれが続くととてつもない倍率になります。これは投資でよく用いられる概念ですが、良い習慣は未来への投資なので習慣にもあてはまります。良い習慣を身に付けるのは早ければ早いほど良いです。

私はまず長時間YouTubeを見てしまう習慣を断って、直近の業務に役立つITの勉強を習慣として身に付けよう思います。