今回は、「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の設計力がワンランクアップしますよ!