Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLではテーブルからデータを抽出することが可能ですが、データベース処理を行っているとビュー(VIEW)を参照するという機会にも遭遇します。

本記事では、データベース初心者の方向けにSQLにおけるビュー(VIEW)の基本的な使い方をサンプルを交えながらご紹介していきたいと思います。

ポテパンダの一言メモ

記事内で利用するサンプルはMySQLを利用して検証しています。
データベース毎に記述方法が異なることもありますので、ご利用のデータベースに合わせて適宜読み替えをお願いします。

SQLのビュー(VIEW)って何?


SQLで利用されるビューは、「仮想テーブル」と考えてもらえば良いかと思います。

ユーザーが必要な部分だけを抜粋したり、各テーブルからユーザーがデータを参照しやすいように加工したビューを作成することが出来ます。

実体としてのデータは存在しませんが、ユーザーからはテーブル操作を行うのと同じ感覚で参照することが可能です。

ビューの実体

ビューに実体のデータは存在しないとご紹介しましたが、ビューの実体は「SELECT文」です。

ビューにアクセスする際、定義されたSELECT文が実行され、抽出されたデータの塊を参照することで、仮想テーブルのように扱うことが可能となっています。

ビューを利用する目的

ビューには大きく2つの利用目的があり、「データ抽出の簡略化」と「セキュリティ」が挙げられます。

データ抽出の簡略化

SQLで頻繁に利用する各種テーブルから抽出したデータの塊が存在する場合、毎回複雑なクエリを作成して実行するのは手間が掛かるのと同時にミスにも繋がりかねません。

一方で、ビューとして定義しておけば、ユーザーはビューにアクセスするだけで自動的に作成済みのクエリが実行されるため、開発効率を大幅に削減することが可能となります。

セキュリティ

ビューを利用することにより、実体のテーブルに格納されているユーザーに直接見せたくないデータへのアクセスを制限することが可能になります。

また、不用意にデータを更新してしまうトラブルを防ぐことが出来るなど、実際にユーザーが必要なデータのみを抜粋したビューへのアクセスに制限することで、セキュリティを強化することにも繋がります。

SQLでビュー(VIEW)の基本的な使い方


利用用途を確認したところで、実際にSQLでビューを使う方法について確認していきましょう。

ビューの作成

まずはビューの作成ですが「CREATE VIEW文」を使用します。

CREATE VIEW ビュー名 AS 定義;

定義の部分には、実際にビューとして表示する内容を取得する「SELECT文」を記述します。

ビューの参照

次にビューの参照方法ですが、テーブルを参照する際と同じく「SELECT文」が利用可能です。

SELECT カラム名,(カラム名, ...)
FROM ビュー名;

通常テーブル名を指定するFROM句にビュー名を指定するだけです。

ビューの変更

ビューの変更方法は2種類存在します。

「ALTER VIEW文」と「CREATE VIEW OR REPLACE文」を使用する方法です。

ALTER VIEW文

まずはALTER VIEW文の構文を確認していきましょう。

ALTER VIEW ビュー名 AS 定義;

CREATE VIEWと記述方法は同じです。

ビュー名に既存のビューを指定することで、新たに指定された定義内容に変更することが可能です。

CREATE VIEW OR REPLACE文

もう一つの方法が「CREATE VIEW OR REPLACE文」を使用する方法です。

CREATE VIEW OR REPLACE ビュー名 AS 定義;

指定したビュー名がデータベースに存在しない場合は新規作成、既に存在する場合には既存ビューの定義を変更する処理が実行されます。

ビューの削除

ビューの削除を行うには「DROP VIEW文」を利用することが可能です。

DROP VIEW (IF EXISTS) ビュー名;

DROP VIEWで指定したビュー名が存在しなかった場合、通常エラーとして処理が終了します。

SQL文自体をエラーとしたくない場合には、「DROP VIEW IF EXISTS」と記述することで処理を正常終了させることが可能です。

SQLでビュー(VIEW)を使ったサンプルを確認しよう


では実際にサンプルで動作確認を行ってみましょう。

今回はサンプル用のテーブルとして、「office」と「region」を下記のデータで用意しました。

officeテーブル

+------+--------------------+-----------+
| id   | office_name        | region_id |
+------+--------------------+-----------+
|    1 | 新宿支店            |         3 |
|    2 | 渋谷支店            |         3 |
|    3 | 函館支店            |         1 |
|    4 | 梅田支店            |         5 |
|    5 | 那覇支店            |         9 |
|    6 | ソウル支店          |        99 |
|    7 | バンコク支店        |        99 |
+------+--------------------+-----------+

regionテーブル

+------+-------------+
| id   | region_name |
+------+-------------+
|    1 | 北海道      |
|    2 | 東北        |
|    3 | 関東        |
|    4 | 中部        |
|    5 | 近畿        |
|    6 | 中国        |
|    7 | 四国        |
|    8 | 九州        |
|    9 | 沖縄        |
+------+-------------+

ビューを作成してみよう

まずは「office」テーブルから「office_name」と「region_id」だけを抽出したビューを作成してみましょう。

CREATE VIEW office_view AS select office_name, region_id from office;

実際に作成出来ているかビュー名を指定したSELECT文で確認してみましょう。

SELECT * FROM office_view;

実行した結果が下記の通りです。

+--------------------+-----------+
| office_name        | region_id |
+--------------------+-----------+
| 新宿支店           |         3 |
| 渋谷支店           |         3 |
| 函館支店           |         1 |
| 梅田支店           |         5 |
| 那覇支店           |         9 |
| ソウル支店         |        99 |
| バンコク支店       |        99 |
+--------------------+-----------+

ビューの定義を変更してみよう

では少し応用編として、「office」と「region」テーブルから「office_name」と「region_name」を取得するビューに変更してみましょう。

ビューの定義を変更したい場合には、「ALTER VIEW文」と「CREATE VIEW OR REPLACE文」が利用可能でしたね。

今回はALTER VIEW文を利用して変更してみたいと思います。

ALTER VIEW office_view AS
select office.office_name, region.region_name
from office
inner join region
on region.id = office.region_id;

変更したビュー名をSELECT文で確認した結果が下記となります。

+--------------+-------------+
| office_name  | region_name |
+--------------+-------------+
| 函館支店      | 北海道       |
| 新宿支店      | 関東        |
| 渋谷支店      | 関東        |
| 梅田支店      | 近畿        |
| 那覇支店      | 沖縄        |
+--------------+-------------+

ビューの定義が変更されて、取得された値が変わっていることをご確認頂けます。

ビューを削除してみよう

最後に「DROP VIEW文」でビューを削除してみましょう。

DROP VIEW office_view;

実行後、select文で「office_view」を参照しようとすると下記のようなエラーとなります。

ERROR 1146 (42S02): Table 'test_db.office_view' doesn't exist

さいごに: SQLのビュー(VIEW)操作を理解して適切なデータベース処理を実施しよう


本記事では、SQLのビュー操作について、基本的な使い方をサンプルを用いながらご紹介してきました。

SQLの学習を進めている段階ではあまり使うことのない機能かも知れませんが、実務では頻繁に利用される機能です。

参照方法など、基本的な使い方は通常のテーブル操作とほとんど変わりませんので、聴き慣れない難しそうな処理と考えず積極的に活用してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。