ビューとは、1つ以上のテーブルから必要なレコードを取得して構成される仮想的なテーブルのようなものです。
このページでは、ビューとは何か?ビューの制限事項や注意点をデータベース初心者向けにわかりやすく1分で解説します。
プログラマーやシステムエンジニアを目指す方であれば、知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。
【DB】ビューとは
冒頭でも開設した通り、ビュー(View)とは1つ以上のテーブルから必要な要素のみを取得して作成される仮想的なテーブルのようなものです。
簡単に図解で説明します。
上記のように1つのテーブルから必要な列だけ(ID列~Math列)を抜き取って仮想的なテーブルのように作成したのがビューの例です。
上記は1つのテーブルから必要な要素を取得して作成したビューですが、以下のように2つ以上のテーブルから要素を取得して作成することも可能です。
ビューの作成:CREATE VIEW
ビューを作成する際には "CREATE VIEW" 文を用います。
CREATE VIEW ビュー名称 AS (SELECT文);
CREATE VIEW に続いてビュー名称を指定し、AS句に続いてSELECT文を記述します。
上記の構文を用いて実際にPointListテーブルからMathPointListビューを作成してみます。
SELECT * FROM PointList; /* +----+------+-------+----------+------+---------+ | ID | Name | Class | Japanese | Math | English | +----+------+-------+----------+------+---------+ | 1 | 佐藤 | A | 100 | 100 | 85 | | 2 | 鈴木 | A | 90 | 70 | 70 | | 3 | 高橋 | A | 85 | 70 | 65 | | 4 | 中村 | A | 90 | 65 | 85 | | 5 | 小林 | B | 70 | 90 | 65 | | 6 | 山口 | B | 90 | 85 | 85 | | 7 | 田中 | B | 70 | 90 | 65 | | 8 | 伊藤 | B | 70 | 90 | NULL | +----+------+-------+----------+------+---------+ */
ビューを作成する際に利用するCREATE VIEW文のサンプルがこちらです。
CREATE VIEW MathPointList AS SELECT ID, Name, Class, Math FROM PointList; /* AS句のSELECT文で指定した ID列,Name列,Class列,Math列 のみのビューが作成される +----+------+-------+------+ | ID | Name | Class | Math | +----+------+-------+------+ | 1 | 佐藤 | A | 100 | | 2 | 鈴木 | A | 70 | | 3 | 高橋 | A | 70 | | 4 | 中村 | A | 65 | | 5 | 小林 | B | 90 | | 6 | 山口 | B | 85 | | 7 | 田中 | B | 90 | | 8 | 伊藤 | B | 90 | +----+------+-------+------+ */
PointListテーブルから必要な列だけを取得した MathPointList ビューが作成されました。
ビュー:SELECT文でレコード抽出
本ページ冒頭で「ビューは仮想的なテーブルです」と説明した通り、SELECT文を実行する際には一般的なテーブルを扱うのと同じように抽出処理を行うことができます。
つまり、SQLの観点から見るとテーブルもビューも同じように扱うことが可能であるということです。
先ほど作成したビューからSELECT文を用いてレコードを取得してみます。
-- Class「A」の学生に関するレコードのみを取得 SELECT * FROM MathPointList WHERE Class = 'A'; /* 結果 Class「A」の学生に関するレコードのみが抽出される +----+------+-------+------+ | ID | Name | Class | Math | +----+------+-------+------+ | 1 | 佐藤 | A | 100 | | 2 | 鈴木 | A | 70 | | 3 | 高橋 | A | 70 | | 4 | 中村 | A | 65 | +----+------+-------+------+ */
ご覧のように普通のテーブルと同じようにレコードを取得することができました。
SELECT文の基本ルールを復習しておきたい方は以下の記事からご覧ください。
ビューとテーブルの違い
では、ビューとテーブルは具体的に何がどう異なるのでしょうか?
結論から言うと、ビューとテーブルはレコードが保存されるか?SELECT文が保存されるか?という点で異なります。
ビューはあくまでもSELECT文を保管しているだけにすぎず、ビューの中身に実際のレコードが保存されているわけではありません。
先ほど、SELECT文を利用してビューからレコードを抽出しましたが、それはビューに保存されているレコードを参照していたわけではないのです。
SELECT * FROM MathPointList WHERE Class = 'A'; -- MathPointList = SELECT ID, Name, Class, Math FROM PointList /* 結果 +----+------+-------+------+ | ID | Name | Class | Math | +----+------+-------+------+ | 1 | 佐藤 | A | 100 | | 2 | 鈴木 | A | 70 | | 3 | 高橋 | A | 70 | | 4 | 中村 | A | 65 | +----+------+-------+------+ */
概念的に図解すると、ビューに対するSELECT文は以下のように2つのSELECT文が内部的に発行されていることになります。
SQL:ビューのメリット/デメリット
ビューは実際にはレコードを保管しておらず、テーブルに対するSELECT文を保持しているため、以下のようなメリットがあります。
ビューは内部的にレコードを保持しないため、その分コンピュータ内部の記憶容量の圧迫を防ぐことができます。
もしビューを作成せずに、同じようなレコードを保持するテーブルを複数構築していると、それらのテーブルに存在するレコードはすべてコンピュータ内部の別々の場所に保管されるため、限られた記憶容量を無駄に消費してしまいます。
加えてビューを利用すれば、よく利用するSELECT文を毎回記述する必要がなくなるので、開発効率や管理工数を格段に削減することができるのも大きなメリットになります。
ビューの注意点
ただし、ビューを利用する際の大きなデメリットが「パフォーマンス」です。
先ほど解説した通りビューに対してSELECT文を発行する際には、内部的には最低2回以上のSELECT文が発行されることになります。
したがって、一般的なテーブルに対するSELECT文よりも、ビューに対するSELECT文の方が処理速度が遅くなってしまうという欠点があります。
上記のメリット・デメリットを比較検討してビューの要否を決定する必要があるという点に注意しましょう。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。