忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL ビューを作成と使用方法について(CREATE VIEW)

データの編集などを含んだ SELECT文 を別のテーブルの様に扱えるのが ビュー(VIEW) で毎回同じ SELECT文 を記述しなくても 通常のテーブルの様に扱えます。

この ビュー(VIEW) を作成を CREATE VIEW で行います。

CREATE VIEW について順を追って説明します。


■CREATE VIEWの書き方

CREATE VIEW文 の書式は以下の通りです。

CREATE [OR REPLACE] VIEW view_name [(column_list)] AS select_statement
-- view_name        : ビューの名称
-- [(column_list)]  : カラム名リスト(select_statement のカラムリストに名前を付ける)
-- select_statement : ビューの元となる SELECT文


なお CREATE OR REPLACE VIEW の指定の場合は、既にビューが存在している場合は上書きを行います。

それでは簡単例のビューの作成を行ってみます。 ビューの元となる SELECT文 はリテラルの SELECT でも問題ないので、UNION の説明で使用した以下の SQL を当てます。

MySQL 異なるデータ取得(SELECT)結果を結合して取得する方法について(UNION)

CREATE VIEW t_view AS 
    SELECT '1' AS 'COL1', '2' AS 'COL2'
    UNION
    SELECT 'A' AS 'COLA', 'B' AS 'COLB';

作成されたビューの一覧を表示します。

MariaDB [test]> SELECT * FROM t_view;
+------+------+
| COL1 | COL2 |
+------+------+
| 1    | 2    |
| A    | B    |
+------+------+
2 rows in set (0.00 sec)

それではビューのカラム名を変更してみます。 ビューの上書きなので以下の文となります。

CREATE OR REPLACE VIEW t_view(COLUMN1, COLUMN2) AS 
    SELECT '1' AS 'COL1', '2' AS 'COL2'
    UNION
    SELECT 'A' AS 'COLA', 'B' AS 'COLB';

変更されたビューの一覧を表示します。 カラム名称が変更されたことが分かります。

MariaDB [test]> SELECT * FROM t_view;
+---------+---------+
| COLUMN1 | COLUMN2 |
+---------+---------+
| 1       | 2       |
| A       | B       |
+---------+---------+
2 rows in set (0.00 sec)


この様なリテラル表では面白くないので、テーブルを使った例を以降に記します。

■CREATE VIEW の元となるテーブルについて

以下のページで使用した 商品テーブル(マスタ)売上数量テーブル を使用してビューにします。
MySQL データ取得(SELECT)のWHRE句に サブクエリ条件で ANY ALL の使い方について(ANY、SOME、ALL)
商品テーブル(マスタ)売上数量テーブル は以下の通りです。

MariaDB [test]> SELECT * FROM product;
+----+----------+-------+
| id | name     | price |
+----+----------+-------+
|  1 | 鉛筆A    |    80 |
|  2 | 鉛筆B    |   100 |
|  3 | くれよん |   500 |
|  4 | 蛍光ペン |   120 |
|  5 | 消しゴム |   150 |
+----+----------+-------+
5 rows in set (0.00 sec)

MariaDB [test]> SELECT * FROM sales;
+----+--------+------------+--------+
| id | id_prd | salesdate  | volume |
+----+--------+------------+--------+
|  1 |      1 | 2024-01-04 |     10 |
|  2 |      1 | 2024-01-07 |     15 |
|  3 |      2 | 2024-01-07 |     20 |
|  4 |      3 | 2024-01-05 |      1 |
|  5 |      3 | 2024-01-10 |      2 |
|  6 |      3 | 2024-01-15 |      2 |
|  7 |      4 | 2024-01-05 |      5 |
|  8 |      4 | 2024-01-14 |      3 |
|  9 |      4 | 2024-01-20 |      1 |
| 10 |      5 | 2024-01-20 |      5 |
| 11 |      5 | 2024-01-22 |     10 |
+----+--------+------------+--------+
11 rows in set (0.01 sec)


商品テーブルと売上数量テーブルを連結しての商品名称入りの一覧を表示してみます。
今回のテストのための基本の SELECT文 となります。

SELECT sales.id, sales.id_prd, product.name, sales.salesdate, sales.volume FROM sales
LEFT JOIN product
ON sales.id_prd = product.id
ORDER BY sales.id;

この SQL の結果は以下の通りです。

+----+--------+----------+------------+--------+
| id | id_prd | name     | salesdate  | volume |
+----+--------+----------+------------+--------+
|  1 |      1 | 鉛筆A    | 2024-01-04 |     10 |
|  2 |      1 | 鉛筆A    | 2024-01-07 |     15 |
|  3 |      2 | 鉛筆B    | 2024-01-07 |     20 |
|  4 |      3 | くれよん | 2024-01-05 |      1 |
|  5 |      3 | くれよん | 2024-01-10 |      2 |
|  6 |      3 | くれよん | 2024-01-15 |      2 |
|  7 |      4 | 蛍光ペン | 2024-01-05 |      5 |
|  8 |      4 | 蛍光ペン | 2024-01-14 |      3 |
|  9 |      4 | 蛍光ペン | 2024-01-20 |      1 |
| 10 |      5 | 消しゴム | 2024-01-20 |      5 |
| 11 |      5 | 消しゴム | 2024-01-22 |     10 |
+----+--------+----------+------------+--------+
11 rows in set (0.00 sec)



■CREATE VIEW とその利用

上記の商品名称入りの一覧表示の SELECT文 を使ってビューを作成します。

CREATE VIEW v_sales(id_sal, id_prd, prd_name, salesdate, salesvol) AS 
  SELECT sales.id, sales.id_prd, product.name, sales.salesdate, sales.volume FROM sales
  LEFT JOIN product
  ON sales.id_prd = product.id;


作成されたビューを表示します。

MariaDB [test]> SELECT * FROM v_sales;
+--------+--------+----------+------------+----------+
| id_sal | id_prd | prd_name | salesdate  | salesvol |
+--------+--------+----------+------------+----------+
|      1 |      1 | 鉛筆A    | 2024-01-04 |       10 |
|      2 |      1 | 鉛筆A    | 2024-01-07 |       15 |
|      3 |      2 | 鉛筆B    | 2024-01-07 |       20 |
|      4 |      3 | くれよん | 2024-01-05 |        1 |
|      5 |      3 | くれよん | 2024-01-10 |        2 |
|      6 |      3 | くれよん | 2024-01-15 |        2 |
|      7 |      4 | 蛍光ペン | 2024-01-05 |        5 |
|      8 |      4 | 蛍光ペン | 2024-01-14 |        3 |
|      9 |      4 | 蛍光ペン | 2024-01-20 |        1 |
|     10 |      5 | 消しゴム | 2024-01-20 |        5 |
|     11 |      5 | 消しゴム | 2024-01-22 |       10 |
+--------+--------+----------+------------+----------+
11 rows in set (0.11 sec)


カラム名がビュー作成で指定した名称になっていることが分かります。

なお、ビューは通常のテーブルの様に扱うことができます。
例えば WHERE で条件を付けたり、ORDER BYLIMIT で表示を制限したりできます。

MariaDB [test]> SELECT * FROM v_sales
    -> WHERE salesdate >= '2024-01-05'
    -> ORDER BY salesvol
    -> LIMIT 8;
+--------+--------+----------+------------+----------+
| id_sal | id_prd | prd_name | salesdate  | salesvol |
+--------+--------+----------+------------+----------+
|      4 |      3 | くれよん | 2024-01-05 |        1 |
|      9 |      4 | 蛍光ペン | 2024-01-20 |        1 |
|      5 |      3 | くれよん | 2024-01-10 |        2 |
|      6 |      3 | くれよん | 2024-01-15 |        2 |
|      8 |      4 | 蛍光ペン | 2024-01-14 |        3 |
|      7 |      4 | 蛍光ペン | 2024-01-05 |        5 |
|     10 |      5 | 消しゴム | 2024-01-20 |        5 |
|     11 |      5 | 消しゴム | 2024-01-22 |       10 |
+--------+--------+----------+------------+----------+
8 rows in set (0.03 sec)











PR

コメント

コメントを書く