ビューの機能 free62
Wednesday,July,10,2013
○データベースを表示させる。
MySQL> show databases;
○現在接続されているデーターベース
MySQL> select database();
database()
NULL どこのデータベースにも接続していない状況
mysql> USE sadachika_shop; *データベースを指定する
○テーブルを表示させる。
SHOW TABLES;
○テーブルを作る
mysql> create table sadachika_shop.sadachi_products(sada_id int, sada_name varchar(20), sada_category varchar(20)); *カラム名sada_id INT型, カラム名sada_name VARCHAR型, カラム名sada_category VARCHAR型
○データをカラムに入力
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(1, '牛乳', '飲み物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(2, 'たこ焼き', '食べ物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(3, 'りんご', '果物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(4, 'ワイン', '飲み物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(5, 'ピザ', '食べ物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(6, 'ブドウ', '果物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(7, 'にんじん', '野菜');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(8, 'コーラ', '飲み物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(9, '牛丼', '食べ物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(10, 'キューイフルーツ', '果物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(11, 'ほうれん草', '野菜');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(12, 'ビール', '飲み物');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(13, '天丼', '食べ物');
○データをカラムに入力
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(1, '牛乳', 'Drink');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(2, 'たこ焼き', 'Food');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(3, 'りんご', 'Fruit');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(4, 'ワイン', 'Drink');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(5, 'ピザ', 'Food');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(6, 'ブドウ', 'Fruit');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(7, 'にんじん', 'Vegetables');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(8, 'コーラ', 'Drink');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(9, '牛丼', 'Food');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(10, 'キューイフルーツ', 'Fruit');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(11, 'ほうれん草', 'Vegetables');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(12, 'ビール', 'Drink');
mysql> insert into sadachika_shop.sadachi_products(sada_id, sada_name, sada_category) values(13, '天丼', 'Food');
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_products;
sada_id sada_name sada_category
1 牛乳 飲み物
2 たこ焼き 食べ物
3 りんご 果物
4 ワイン 飲み物
5 ピザ 食べ物
6 ブドウ 果物
7 にんじん 野菜
8 コーラ 飲み物
9 牛丼 食べ物
10 キューイフルーツ 果物
11 ほうれん草 野菜
12 ビール 飲み物
13 天丼 食べ物
1 牛乳 Drink
2 たこ焼き Food
3 りんご Fruit
4 ワイン Drink
5 ピザ Food
6 ブドウ Fruit
7 にんじん Vegetables
8 コーラ Drink
9 牛丼 Food
10 キューイフルーツ Fruit
11 ほうれん草 Vegetables
12 ビール Drink
13 天丼 Food
失敗○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'食べ物'のビューを作成する。
↓作ったビューをおさめるデータベース名
mysql> create view sadachika_shop.sadachi_viewfoodproducts *新しく作るビューの名前
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = '食べ物'; *漢字だとなぜか失敗します。アルファベットだとビューの作成が出来ます。
↑元のカラム名 ↑元のカラム名 ↑元のdb名 ↑元のテーブル名 ↑元のカラム名 ↑元のカラムデータ
失敗○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewfoodproducts; *漢字だと失敗する なんで?
失敗○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'食べ物'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewdrink
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = '飲み物';
失敗○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewdrink; *漢字だと失敗する なんで?
失敗○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'果物'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewfruit5
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = '果物';
失敗○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewfruit5; *漢字だと失敗する なんで?
失敗○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'Vegetables'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewvegetables5
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = '野菜';
失敗○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewvegetables5; *漢字だと失敗する なんで?
○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'Drink'のビューを作成する。 ↓カラム名が抜けている
お手本mysql> create view drink as select * from products where category = 'Drink';
mysql> create view sadachika_shop.sadachi_viewdrink2
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'drink';
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewdrink2;
sada_id sada_name
1 牛乳
4 ワイン
8 コーラ
12 ビール
○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'Food'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewfood
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'food';
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewfood;
sada_id sada_name
2 たこ焼き
5 ピザ
9 牛丼
13 天丼
○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'Fruit'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewfruit
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'Fruit';
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewfruit;
sada_id sada_name
3 りんご
6 ブドウ
10 キューイフルーツ
○○「sadachi_products」テーブルの中の「sada_category」カラムの値が'Vegetables'のビューを作成する。
mysql> create view sadachika_shop.sadachi_viewvegetables
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'Vegetables';
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_viewvegetables;
sada_id sada_name
7 にんじん
11 ほうれん草
○○もう一つ試してみます。「products」テーブルの中の「category」カラムの値を重複せずに取得するビューを作成します。
作ったビューを収めるdbの場所↓ ↓ビュー名
mysql> create view sadachika_shop.sadachi_categorylist *新しく作るビューの場所であるデータベース名,ビュー名
-> as select distinct sada_category from sadachi_products;
↑元のカラム名 ↑元のテーブル名
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_categorylist;
飲み物
食べ物果物
野菜
Drink
Food
Fruit
Vegetables
未だ○テーブルの内を検索
mysql> SELECT * FROM sadachika_shop.sadachi_products WHERE sada_category = '食べ物'; *日本語で検索結果をしぼれるのに、ビューの作成はできない
sada_id sada_name sada_category
2 たこ焼き 食べ物
5 ピザ 食べ物
9 牛丼 食べ物
13 天丼 食べ物
○○ビューのカラム名を指定し変更する
CREATE VIEW db_name.view_name(column_list) AS select_statement;
create view user(userid, username) as select id, name from personal;
作ったビューを収めるdbの場所↓ ↓ビュー名 ↓ビューのカラム名 ↓ビューのカラム名
mysql> create view sadachika_shop.hiraya_fruitproducts(hira_id, hira_fruitname)
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'Fruit';
↑元カラム名 ↑元カラム名 ↑元db名 ↑元テーブル名 ↑元カラム名 ↑データ
○テーブルの中身の表示
mysql> select * from sadachika_shop.hiraya_fruitproducts;
hira_id hira_fruitname
3 りんご
6 ブドウ
10 キューイフルーツ
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_products;
SHOW TABLES FROM sadachika_shop;
○○指定した名前のビューを作成するためのCREATE VIEW文を取得
SHOW CREATE VIEW view_name;
mysql> show create view sadachika_shop.hiraya_fruitproducts\G
****************** 1. row *******************
View: hiraya_fruitproducts
Create View: CREATE ALGORITHM=UNDEFINED DEFINER= 'root'@'localhost'SQL
SECURITY DEFINER VIEW 'hiraya_fruitproducts' AS select 'sadachi_products'.'sada_id' AS 'hira_id',
'sadachi_products'.'sada_name' AS 'hira_fruitname' from 'sadachi_products' where('sadachi_products'.'sada_category'='Fruit')
character_set_client: cp932
collation_connection: cp932_japanese_ci
1 row in set (0.02 sec)
○○ビューではないテーブルをCREATE VIEW文で使ってみる。
SHOW CREATE VIEW view_name;
mysql> show create view sadachika_shop.sadachi_products\G
ERROR 1347 (HY000): 'sadachika_shop.sadachi_products' is not VIEW
○○元のカラムをそのままに、新しいビューを作る
↓元のカラム名を特定していない(全てを選択している)
mysql> create view sadachika_shop.sadachi_drink15 as select * from sadachika_shop.sadachi_products where sada_category = 'Drink';
↑新しく作るビューの名前
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_drink15;
sada_id sada_name sada_category
1 牛乳 Drink
4 ワイン Drink
8 コーラ Drink
12 ビール Drink
○○指定した名前のビューを作成するためのCREATE VIEW文を取得
mysql> show create view sadachika_shop.sadachi_drink15\G
****************** 1. row *******************
View: sadachi_drink15
Create View: CREATE ALGORITHM=UNDEFINED DEFINER= 'root'@'localhost'SQL
SECURITY DEFINER VIEW 'sadachi_drink15' AS select 'sadachi_products'.'sada_id' AS 'sada_id',
'sadachi_products'.'sada_name' AS 'sada_name',
'sadachi_products'.'sada_category' AS 'sada_category'
from 'sadachi_products' where('sadachi_products'.'sada_category'='Drink')
character_set_client: cp932
collation_connection: cp932_japanese_ci
1 row in set (0.03 sec)
○テーブルの削除場合はこんな感じ
↓テーブル
mysql> drop table sadachika_shop.sadachi_drink15; *ビューをテーブルを削除する式では、削除できない
ERROR 1051 (42S02): Unknown table 'sadachika_shop.sadachi_drink15'
○○ビューの削除
↓ビュー
mysql> drop view sadachika_shop.sadachi_drink15; *削除できました
Query OK, 0 rows affected (0.03 set)
○テーブルの中身の表示
SHOW TABLES FROM sadachika_shop;
○○新規、又は上書きでビューを作成する。
replace 取って代わる.
↓既に同名のビュー名があれば上書きする ↓新規のビュー名
mysql> create or replace view sadachika_shop.sadachi_vegetables *既存のテーブル名にsadachi_vegetablesは無いので新規でビューを作成する
-> as select sada_id, sada_name from sadachika_shop.sadachi_products where sada_category = 'Vegetables';
↑元カラム名 ↑元カラム名 ↑db名 ↑元のテーブル名 元カラム名 元カラムデータ
○テーブルの中身の表示
SHOW TABLES FROM sadachika_shop;
Tables_in_sadachika_shop
sadachi_vegetables *増えた
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_vegetables;
sada_id sada_name
7 にんじん
11 ほうれん草
○○新規、又は上書きでビューを作成する。
mysql> create or replace view sadachika_shop.sadachi_vegetables *既存のテーブル名にsadachi_vegetablesがあるので上書きする
-> as select * from sadachika_shop.sadachi_products where sada_category = 'Vegetables';
↑元カラム全選択
○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_vegetables;
sada_id sada_name sada_category *カテゴリが増えたね、上書きされた。
7 にんじん Vegetables
11 ほうれん草 Vegetables
○○ビューとカラムの名前を変える ↓新テーブル上書きされる ↓カラム名を変更するsada_name→hira_vegetablename
mysql> alter view sadachika_shop.sadachi_vegetables(hira_vegetablename)
-> as select sada_name from sadachika_shop.sadachi_products where sada_category = 'vegetables';
↑元カラム名 ↑db名 ↑元テーブル名 ↑元カラム名 ↑元カラムデータ
○○テーブルの中身の表示
mysql> select * from sadachika_shop.sadachi_vegetables;
hira_vegetablename *カラム名が1つになり名前も変わった。
にんじん
ほうれん草
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。