Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
ビューには色々な作り方があるのだが、今まで説明に使ってきたのは
CREATE VIEW `漢字` AS SELECT * FROM `漢字`;
というこれ以上安直なのはないという代物であった。
今回は、ビューのカラム名に漢字を使ったものを示そう。
今までよりも複雑なビューの作り方になるので、CREATE VIEW の構文を確認しておこう。
19.2. CREATE VIEW Syntax
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
ここでは、東京の23区の情報(もちろん一部だけ)を例に使うことにしよう。
mysql> CREATE TABLE `東京` ( `name` VARCHAR(20),`area` FLOAT, `population` INT)
-> DEFAULT CHARACTER SET eucjpms;
Query OK, 0 rows affected (0.11 sec)
mysql> INSERT INTO `東京` VALUES
-> ('千代田区',11.64,43881),('世田谷区',58.08,810897),
-> ('新宿区',18.23,304539),('文京区',11.31,93949),
-> ('足立区',53.20,645873),('江東区',39.48,429224);
Query OK, 6 rows affected (0.15 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM `東京`;
+----------+-------+------------+
| name | area | population |
+----------+-------+------------+
| 千代田区 | 11.64 | 43881 |
| 世田谷区 | 58.08 | 810897 |
| 新宿区 | 18.23 | 304539 |
| 文京区 | 11.31 | 93949 |
| 足立区 | 53.2 | 645873 |
| 江東区 | 39.48 | 429224 |
+----------+-------+------------+
6 rows in set (0.03 sec)
mysql>
これから、人口密度を含むビューを作ってみよう。
(カッコ)の中に、漢字でビューのカラム名を適当に並べることにした。 こんないい加減な書き方でちゃんと作れると楽だな。
mysql> CREATE VIEW `東京密集度` (`区名`,`面積`,`人口`,`人口密度`)
-> AS SELECT `name`, `area`, `population`, `population`/`area` FROM `東京`;
Query OK, 0 rows affected (0.04 sec)
mysql> SELECT * FROM `東京密集度`;
+----------+-------+--------+-----------------+
| 区名 | 面積 | 人口 | 人口密度 |
+----------+-------+--------+-----------------+
| 千代田区 | 11.64 | 43881 | 3769.8452496328 |
| 世田谷区 | 58.08 | 810897 | 13961.724766448 |
| 新宿区 | 18.23 | 304539 | 16705.376173731 |
| 文京区 | 11.31 | 93949 | 8306.7194088737 |
| 足立区 | 53.2 | 645873 | 12140.469750706 |
| 江東区 | 39.48 | 429224 | 10871.9352831 |
+----------+-------+--------+-----------------+
6 rows in set (0.00 sec)
mysql>
ちゃんと出来ちゃったようだ。
CREATE VIEW による確認も載せておく。しかし、とても見難い。
mysql> SHOW CREATE VIEW `東京密集度`\G
*************************** 1. row ***************************
View: 東京密集度
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER VIEW `東京密集度` AS select `東京`.`name` AS `区名`,
`東京`.`area` AS `面積`,`東京`.`population` AS `人口`,
(`東京`.`population` / `東京`.`area`) AS `人口密度` from `東京`
1 row in set (0.00 sec)
mysql>
実際に必要なのは、区名と人口密度だけとしよう。 また、人口密度は、こんなに細かい精度で出ても意味が無いので、 四捨五入して整数にしてしまおう。
DROP VIEW で一旦削除してから作り直そう。
mysql> DROP VIEW `東京密集度`;
Query OK, 0 rows affected (0.05 sec)
mysql> CREATE VIEW `東京密集度` (`区名`, `人口密度`)
-> AS SELECT `name`, ROUND(`population`/`area`) FROM `東京`;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM `東京密集度`;
+----------+----------+
| 区名 | 人口密度 |
+----------+----------+
| 千代田区 | 3770 |
| 世田谷区 | 13962 |
| 新宿区 | 16705 |
| 文京区 | 8307 |
| 足立区 | 12140 |
| 江東区 | 10872 |
+----------+----------+
6 rows in set (0.01 sec)
mysql>
なんとなく動いているようだ。
人口密度の多い順にしてみよう。
mysql> SELECT * FROM `東京密集度` ORDER BY `人口密度` DESC; +----------+----------+ | 区名 | 人口密度 | +----------+----------+ | 新宿区 | 16705 | | 世田谷区 | 13962 | | 足立区 | 12140 | | 江東区 | 10872 | | 文京区 | 8307 | | 千代田区 | 3770 | +----------+----------+ 6 rows in set (0.04 sec) mysql>
ORDER BY でビューのカラム名を使ったが、問題なく動いているようだ。
ということで、今日はこのへんでやめておこう。
戻る:ビューの確認
次へ:ビューの変更
フィードバック:
There is no comment.