ビューとは
データそのものではなく、データを取り出すSELECT文だけを保存します。
ビューを使うと、必要なデータが複数のテーブルにまたがる場合など、複雑な集約を行いやすくなります。
ビューとテーブルの違い
テーブル
実際のデータを保存
ビュー
ビューの中にはSELECT文が保存される
ビュー自体はデータを持たない
ビューの制限
- order by句が使えない(並び替え)
- ビューに対する更新は不可能ではないが制限があります。
- 更新系(insert,delete,update)に制約があります。
幾つかの条件を満たす場合のみ、ビューに対する更新が可能。
- select句にdistinctが含まれていない。
- from句に含まれるテーブルが一つだけ
- group by句を使用していない
- having句を使用していない
※ビューとテーブルの更新は連動して行われるため、集約されたビューは更新不可。
ビューのメリット
- データを保存しないので、記憶装置の容量を節約できる。
- よく使うselect文をビューにしておくことで、使い回しができます。
ビューのデメリット
- パフォーマンス低下を招く場合があります。
ビューの作成
ビューの構文
create view ビュー名(ビューの列名1,ビューの列名2,... as select 列1 from テーブル名;
今回は、都道府県別のユーザー数をビューにしてみたいと思います。
まず、usersテーブルを出力してみます。
select * from users;
テーブル名(users)
id | 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 prefecture_user_counts;
と入力すれば、viewは削除できます。
この記事が役に立ったと思ったらポチッ!っと応援お願いします。
↓ ↓
一連の流れを一通り学習したい方は!
↓ ↓
時間や場所に縛られず学習できるMySQL3選
コメント