MySQL ビュー作成・削除

スポンサーリンク
スポンサーリンク

ビューとは

データそのものではなく、データを取り出すSELECT文だけを保存します。

ビューを使うと、必要なデータが複数のテーブルにまたがる場合など、複雑な集約を行いやすくなります。

ビューとテーブルの違い

テーブル

実際のデータを保存

ビュー

ビューの中にはSELECT文が保存される

ビュー自体はデータを持たない

ビューの制限

  • order by句が使えない(並び替え)
  • ビューに対する更新は不可能ではないが制限があります。
  • 更新系(insert,delete,update)に制約があります。

幾つかの条件を満たす場合のみ、ビューに対する更新が可能。

  1. select句にdistinctが含まれていない。
  2. from句に含まれるテーブルが一つだけ
  3. group by句を使用していない
  4. having句を使用していない

※ビューとテーブルの更新は連動して行われるため、集約されたビューは更新不可。

ビューのメリット

  1. データを保存しないので、記憶装置の容量を節約できる。
  2. よく使うselect文をビューにしておくことで、使い回しができます。

ビューのデメリット

  1. パフォーマンス低下を招く場合があります。

ビューの作成

ビューの構文

create view ビュー名(ビューの列名1,ビューの列名2,...
as
select
列1
from テーブル名;

今回は、都道府県別のユーザー数をビューにしてみたいと思います。

まず、usersテーブルを出力してみます。

select
    *
from
    users;

テーブル名(users)

id email last_name first_name gender birthday prefecture_id
1 xxxxxxxx 紫咲 朝陽 2 1978-03-12 1
2 xxxxxxxx 沢村 啓介 1 1973-08-27 14
3 xxxxxxxx 阿部 淳子 2 2000-02-15 28
4 xxxxxxxx 佐古 翔太 1 1995-01-29 25
5 xxxxxxxx 宮里 ひとり 1 1996-06-13 28

次にprefecture_idを使って

prefecturesテーブルに結合します。

テーブル名(prefectures)

id name
1 北海道
2 青森県
3 岩手県
4 宮城県
5 秋田県

usersテーブルとprefecturesを結合します

select 	
  *
from 
  users u /* 別名uを付ける */
inner join
  prefectures p /* 別名pを付ける */
on u.prefecture_id = p.id; /* usersテーブルのprefecture_idにprefectures_idを結合 */
	

1.group by句を使って都道県IDごとに集計するのに
group by
u.prefecture_id;

を使用します。

2.集計結果を表示するのにアスタリスク「*」→をp.name name,
count(*)count

で、都道県のidの集計結果を求めます。

select 	
    p.name name,
    count(*)count
from 
    users u /* 別名uを付ける */
inner join
    prefectures p
    on u.prefecture_id = p.id
group by
    u.prefecture_id;

すると次のようにテーブルが作成されます。

この後いよいよビューの作成です。

先程のselect文でビューを作成します。

以下の太文字部分が記述がビューの作成を追記した文になります。

create view prefecture_user_couns(name,count)
as
select 	
    p.name name,
    count(*)count
from 
    users u /* 別名uを付ける */
inner join
    prefectures p
    on u.prefecture_id = p.id
group by
    u.prefecture_id;

テーブルの下にviewができていますのでViewを右クリックして「Refresh All」をクリックします。

次にViewsの▼ボタンを押すと先程作成したビューが表示されます。

Viewが有効か確認する

viewが使えるか確認するには、

例:

select name, count
from prefecture_user_couns;

と入力します。

viewを削除する

viewを削除するには

構文:drop view ビュー名;

例:

drop view prefecture_user_counts;

と入力すれば、viewは削除できます。

にほんブログ村 IT技術ブログへ

スポンサーリンク
スポンサーリンク
SNSフォローボタン

フォローする

スポンサーリンク
スポンサーリンク