今回は、「MySQLのビュー(View)って何ですか?」という質問にお答えしていきます!

ビューは、MySQLを使った開発でよく出てくる重要な機能の一つですが、意外と知られていないのが現実…。でも心配しないでください。ビューの概念や作り方を、実例を交えてわかりやすく説明していきます!


ビュー(View)ってなに?

まずは一言で。

ビューとは、「SELECT文の結果を仮想的なテーブルとして保存したもの」です。

ビューは、実際にデータを持っているわけではありません。
代わりに、**その場でSELECT文を実行して結果を返してくれる“見せかけのテーブル”**です。

たとえばこんな感じです

CREATE VIEW recent_sales AS
SELECT customer_name, car_name, saleDateTime
FROM sales
JOIN customers USING (customer_id)
JOIN cars USING (car_id)
ORDER BY saleDateTime DESC;

このrecent_salesというビューを作っておけば、あとは普通のテーブルのように使えるんです。

SELECT * FROM recent_sales;


なぜビューを使うの?3つの大きな理由

① 複雑なクエリをシンプルにできる

JOINやWHEREが入り組んだSQL、毎回書くの面倒じゃないですか?

SELECT c.name, s.saleDateTime
FROM sales s
JOIN customers c ON s.customer_id = c.customer_id
WHERE s.saleDateTime > CURDATE();

これをビューにまとめれば:

SELECT * FROM today_sales;

みたいにスッキリ!
読みやすく、メンテナンスもしやすくなります。


② セキュリティとアクセス制御に使える

「一部の社員には売上金額は見せたくない」
「在庫数だけ見せたい」

こういった権限のコントロールにもビューが便利です。

ビューを通して見せたいカラムだけを選んで渡すことで、本体のテーブルにアクセスさせずに済みます。


③ 再利用性が高まる

ビューは再利用できるテンプレートのようなもの。
プロジェクト内で頻繁に使う分析用のSELECT文などは、ビューにしておくと誰でも同じ結果が得られるようになります。


ビューの基本的な作り方

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE 条件;

用語解説

用語説明
CREATE VIEWビューの作成命令
view_nameビューの名前(好きな名前でOK)
SELECT ...実際に実行されるクエリ

実例:売上速報ビューを作ってみよう!

新人研修でも使われている、次のようなスキーマがあるとします。

  • sales:販売履歴
  • cars:車の情報
  • customers:購入者の情報

売上速報ビュー:sales_bulletin

CREATE VIEW sip.sales_bulletin AS
SELECT
    s.sale_id,
    c.car_id,
    cu.customer_id,
    cu.name AS customer_name,
    c.name AS car_name,
    c.price,
    s.saleDateTime
FROM
    sip.sales s
JOIN sip.cars c ON s.car_id = c.car_id
JOIN sip.customers cu ON s.customer_id = cu.customer_id
ORDER BY s.sale_id DESC;

このビューは、「誰が・どの車を・いつ買ったか」を一覧表示できる速報ビューです。

使い方はとっても簡単!

SELECT * FROM sip.sales_bulletin;

普通のテーブルのように扱えるので、JOINを書く必要はもうありません。


補足:ビューの注意点

注意点説明
更新できないビューもあるGROUP BYやDISTINCTを使うとUPDATEできないことがあります
ビューは仮想テーブル実データは持っていないので、変更は元のテーブルに反映される
パフォーマンスに注意複雑なビューを多用すると、読み込みが遅くなることもあります

まとめ

  • ビューはSELECT文の結果をテーブルのように再利用する仕組み
  • 複雑なクエリの簡素化・再利用・セキュリティ強化に使える
  • 作成には CREATE VIEW を使い、利用は普通に SELECT でOK
  • 実データは持たないが、非常に便利な補助テーブルのような存在

今後の学習の指針

  • WITH CHECK OPTION を使って、ビュー経由での更新制限を学ぼう
  • 更新可能なビューと、更新できないビューの違いを整理しよう
  • マテリアライズドビュー(MySQLには未対応)との違いを他のDBと比較してみよう
  • ビューの使いすぎがパフォーマンスに与える影響を実験してみよう

ビューを使いこなせると、SQLの設計力がワンランクアップしますよ!

最後までお読みいただきありがとうございます。