Open Source WEB

ビューには色々な作り方があるのだが、今まで説明に使ってきたのは

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 でビューのカラム名を使ったが、問題なく動いているようだ。

ということで、今日はこのへんでやめておこう。


戻る:ビューの確認

次へ:ビューの変更


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us