見出し画像

SQLにおけるビューの作成と削除

ビューは、ハードディスクなど2次記憶装置に恒久的に保存される実在テーブルではなく、仮想のテーブルです。ビューを生成するSQL命令文の書き方は以下のとおり。

CREATE VIEW ビュー名 AS SELECT テーブル名1 列名1 AS ビューの列名1, テーブル名1 列名2 AS ビューの項目名2, … FROM テーブル1, テーブル2 WHERE 条件式;

また、ビューを削除するSQL命令文の書き方は以下のようになります。
DROP VIEW ビュー名;

【例第3.6】SQL命令文を用いて以下の要求を実現し、それをMySQL上で実行し、動作確認せよ。
仕様要求
 
(1)例第3.5の売上テーブルsaleslistから、ビューsalesviewを生成する。
(2)ビューsalesviewの構成を確認する。
(3)ビューsalesviewの全件データを表示する。
(4)ビューsalesviewを用いて、売上総金額total_amountを算出して表示する。

(1)例第3.5の売上テーブルsaleslistから、ビューsalesviewを生成する。

mysql> USE salesbase;
Database changed
mysql> SHOW tables;
+---------------------+
| Tables_in_salesbase |
+---------------------+
| saleslist           |
+---------------------+
1 row in set (0.13 sec)

mysql> CREATE VIEW salesview AS SELECT sid, goods, price, quantity, price*quantity AS amount FROM saleslist;
Query OK, 0 rows affected (0.52 sec)

mysql> SHOW tables;
+---------------------+
| Tables_in_salesbase |
+---------------------+
| saleslist           |
| salesview           |
+---------------------+
2 rows in set (0.00 sec)

本書によると、

下記のSELECT文の実行結果を用いて、ビューsalesviewを作成する。
SELECT sid, goods, price, quantity, price*quantity AS amount FROM saleslist;

ということは、先に実行結果を表示するSELECT文を作っておけばいいということなのかな?

(2)ビューsalesviewの構成を確認する。

mysql> SHOW fields FROM salesview;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| sid      | char(10) | NO   |     | NULL    |       |
| goods    | char(30) | YES  |     | NULL    |       |
| price    | int      | YES  |     | NULL    |       |
| quantity | int      | YES  |     | NULL    |       |
| amount   | bigint   | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
5 rows in set (0.04 sec)

(3)ビューsalesviewの全件データを表示する。

mysql> SELECT * FROM salesview;
+-----+--------------+--------+----------+--------+
| sid | goods        | price  | quantity | amount |
+-----+--------------+--------+----------+--------+
| T01 | テレビ       | 198000 |        1 | 198000 |
| T02 | 冷蔵庫       | 125000 |        2 | 250000 |
| T03 | 洗濯機       | 104000 |        2 | 208000 |
| T04 | 掃除機       | 125000 |        1 | 125000 |
| T05 | パソコン     | 179800 |        4 | 719200 |
| T06 | カメラ       |  59800 |        3 | 179400 |
+-----+--------------+--------+----------+--------+
6 rows in set (0.01 sec)

(4)ビューsalesviewを用いて、売上総金額total_amountを算出して表示する。

mysql> SELECT SUM(price*quantity) AS total_amount FROM salesview;
+--------------+
| total_amount |
+--------------+
|      1679600 |
+--------------+
1 row in set (0.01 sec)

本書によれば、

テーブルsaleslistから、列amountを追加したビューsalesviewを作成したことで、列amountに対して集約関数SUM()を適用して、総金額を算出できるようになった。

ということなので、SUM()のところを修正しなければなりませんね。

mysql> SELECT SUM(amount) AS total_amount FROM salesview;
+--------------+
| total_amount |
+--------------+
|      1679600 |
+--------------+
1 row in set (0.00 sec)


サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪