SQL

【SQL】ビューを作成・削除する

ビュー(view)を作成する

CREATE VIEWの基本構文

SQLの「CREATE VIEW」を使うことで、ビューを作成することができます。

ビューの基本構文

CREATE  VIEW  <ビュー名>  AS  <SELECT文>  [WITH READ ONLY] [WITH CHECK OPTION];

※ [WITH READ ONLY] [WITH CHECK OPTION]は省略可

パラメータ 説明
WITH READ ONLY 読み取り専用のビューを作成する
WITH CHECK OPTION 更新可能なビューを作成する

「WITH READ ONLY」を指定することで、読み取り専用のビュー、「WITH CHECK OPTION」を指定することで更新可能なビューを作成することができます。

ただし、次の条件に一致する場合は、更新可能な「WITH CHECK OPTION」を指定していても、ビューを更新することはできません。

  • 集合関数(MAXやAVGなど)を使用
  • DISTINCT、GROUP BY、HAVINGを使用
  • 複数の表を結合している。(例外あり)
  • 副問合せを使用

スポンサーリンク

 

本記事では「userテーブル」と「departmentテーブル」に、次のようなデータが格納されていることを前提としています。

【userテーブル】

ID (id) ※PK 名前 (name) 住所 (address) 年齢 (age) 部署ID (department_id)
1001 鈴木一郎 東京都 44 1
1002 佐藤次郎 埼玉県 32 1
1003 田中三郎 千葉県 24 4
1004 伊藤四郎 東京都 22 2
1005 斎藤五郎 東京都 35 2

【departmentテーブル】

ID (id) ※PK 部署名(name)
1 営業部
2 開発部
3 総務部

CREATE  VIEWの使用例

次の例では「userテーブル」と「departmentテーブル」から営業部の社員情報を抽出(user.department_id = '1')したビュー(sales_user)を作成しています。

■CREATE  VIEWの例

CREATE VIEW sales_user AS 
    SELECT 
        u.id, u.name, u.age, d.name AS department_name 
    FROM 
        sampledb.user u, sampledb.department d
    WHERE 
        u.department_id =  d.id
        AND u.department_id = '1';

■作成したビューの確認

> SELECT * FROM sales_user;
+------+----------+------+-----------------+
| id   | name     | age  | department_name |
+------+----------+------+-----------------+
| 1001 | 鈴木一郎 |   44 | 営業部          |
| 1002 | 佐藤次郎 |   32 | 営業部          |
+------+----------+------+-----------------+
2 rows in set (0.01 sec)

「CREATE  VIEW」でビューを作成した結果、営業部の社員情報を管理するビュー「sales_user」が作成されました。

 

今回作成したビューは、結合しているためビューを更新することはできません。試しに「INSERT文」でデータを追加してみると、エラーが出力されます。

> INSERT INTO sales_user VALUES ('2001', '営業部一郎','20','1');
ERROR 1394 (HY000): Can not insert into join view 'sampledb.sales_user' without fields list

ビュー(view)を削除する

DROP VIEWの基本構文

SQLの「DROP VIEW」を使うことで、ビューを削除することができます。

DROP VIEWの基本構文

DROP  VIEW  <ビュー名>;

DROP VIEWの使用例

次の例では上記で作成したビュー「sales_user」を削除しています。

■DROP VIEWの例

DROP VIEW sales_user;


チャンネル登録はこちら

フォローはこちら