SQL第一歩30話.ビューの作成と削除


ビューの作成と削除
サブクエリの部分から分かるように、サブクエリは
  • FROM文で使用することができる.
  • データベース・オブジェクトを書き込みやすい名前にしてサブクエリ뷰(View)と名付けます.
  • -- 뷰 생성
    > CREATE VIEW 뷰_테이블명 AS SELECT * FROM 테이블명; 
    
    -- 뷰 생성 (열 지정)
    > CREATE VIEW 뷰_테이블명(컬럼명, 컬럼명, 컬럼명) AS SELECT 컬럼명, 컬럼명, 컬럼명 FROM 테이블명;
    
    -- 뷰 삭제
    > DROP VIEW 뷰_테이블명;
    
    表示

  • ビューを使用すると、オブジェクトとして使用できないSELECTコマンドの名前と管理ができます.

  • したがって,ビュー参照の際に定義されたSELECTコマンドの実行結果をテーブルとして用いることができる.

  • たとえば、FROM文にサブクエリを含む文が存在するとします.
  • SELECT * FROM (SELECT * FROM sample54) AS sq;
  • は、FROM文で作成されたSELECT * FROM sampl54サブクエリ部分をsample view 67のようなビューと命名することができる.
  • 既存のSELECTコマンドの使用をより簡単にします.以下に示します.
  • SELECT * FROM sample_view_67;
    このビューは、複雑なSELECTコマンドをより簡単にします.
    仮想テーブル
    ビューはテーブルとみなされますが、最終エンティティは存在しません.したがって、「仮想テーブル」(Virtual Table)と呼ばれます.
    したがって、ビューは他のテーブルのように書き込みまたは消去可能な記憶領域を持たない.
  • およびINSERTUPDATE、およびDELETEのコマンドは、条件を満たす場合にのみ使用できますが、SELECTのコマンドのみを使用することを推奨します.
  • ビューの作成と削除
    ビューの作成
    ビューの作成にはCREATE VIEWコマンドが使用されます.
    サンプルview 67ビューを作成して、
  • SELECT * FORM sample54文を置き換えます.
  • で作成されたビューを確認するコマンドは、「Show CREATE VIEWビュー名」の明暗と同じです.
  • mysql > CREATE VIEW sample_view_67 AS SELECT * FROM sample54;
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql > SHOW CREATE VIEW sample_view_67;
    
    +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
    | View           | Create View                                                                                                                                                              | character_set_client | collation_connection |
    +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
    | sample_view_67 | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `sample_view_67` AS select `sample54`.`no` AS `no`,`sample54`.`a` AS `a` from `sample54` | utf8mb4              | utf8mb4_0900_ai_ci   |
    +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
    1 row in set (0.00 sec)
    
    作成したビューを実際に使用すると、次のように返されるアップルの値が正常に表示されます.
    mysql > SELECT * FROM sample_view_67;
    
    +------+------+
    | no   | a    |
    +------+------+
    |    1 |  900 |
    |    2 |  900 |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql > SELECT * FROM (SELECT * FROM sample54) AS sq;
    
    +------+------+
    | no   | a    |
    +------+------+
    |    1 |  900 |
    |    2 |  900 |
    +------+------+
    2 rows in set (0.00 sec)
    

  • ビュー作成時にカラム指定を省略すると、指定したカラム情報がSELECTコマンドのSELECT文から収集され、自動的にビュー内のカラムとして指定されます.逆に、カラムが指定されている場合は、SELECTコマンドのSELECT文で指定されているカラムよりも優先されます.注:カラムのみを指定できます.データ型や制約は指定できません.

  • 列を指定してビューを作成する方法は、次のとおりです.
  • mysql > CREATE VIEW sample_view_672(n, v1, v2) AS SELECT no, a, a*2 FROM sample54;
    
    Query OK, 0 rows affected (0.01 sec)
    
    mysql > SELECT * FROM sample_view_672;
    
    +------+------+------+
    | n    | v1   | v2   |
    +------+------+------+
    |    1 |  900 | 1800 |
    |    2 |  900 | 1800 |
    +------+------+------+
    2 rows in set (0.00 sec)
    SELECTコマンドのSELECT文など、いくつかの列を指定する必要があるので、SELECTコマンドのすべての列を使用する場合は、列を指定しないほうがいいです.
    ビューの削除
    ビューを削除するときはDROP VIEWコマンドを使用します.方法は次のとおりです.
    mysql> DROP VIEW sample_view_672;
    
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> SHOW CREATE VIEW sample_view_672;
    
    ERROR 1146 (42S02): Table 'sample.sample_view_672' doesn't exist
    ビューの弱点
  • SELECTコマンドは、ローを検索してクライアントに返すコマンドです.

  • したがって、ORDER BYコマンドおよびGROUP BYコマンドでソートし、欠落した値を返すことができる.

  • これらの処理には、計算能力が必要なため、コンピュータのCPUが必要です.

  • 他のテーブルとは異なり、ビューはSELECTコマンドを保存するだけなので、あまり大きなストレージスペースは必要ありません.

  • ただし、前述したように、CPUリソースは計算に用いられる.
  • 物質化ビュー
  • ビューでは、この計算能力が使用されるため、ソーステーブルに格納されているデータ量が大きい場合、処理速度が低下します.
  • ネストされたビュー
  • も同様である.
  • これを回避するには、[マテリアルビュー](Materialized View)を使用します.
  • 通常ビューは、データを一時的に保存し、クエリーの終了時に一緒に削除します.
  • 一方、「現実生活」ビューでは、初めて参照されたときにデータが保存されます.

  • 以降の再参照では、以前に保存したデータは保持されるので、SELECTコマンドを毎回実行する必要はありません.

  • テーブルのようにストレージデバイスに格納されます.

  • ビューに指定したテーブルのデータが変更された場合は、SELECTコマンドを再実行してデータを再保存します.これはRDBMSによって自動的に実行される.

  • ビューに割り当てられたテーブルのデータが頻繁に変更されない場合は、「現実生活」ビューを使用してビューの不足を補うことができます.

  • ただし、一部のデータベース製品ではサポートされていないことに注意してください.
  • スナップショット(Snapshot)は、現実の生活ビューに似た方法です.
    関数テーブル

  • ビューを構成するSELECTコマンドは、個別に実行する必要があります.

  • したがって、サブクエリが親クエリに関連付けられている場合、サブクエリは相関サブクエリなどのビューとして使用できません.

  • これらのビューの不足を補うには、関数テーブル(Function Table)を使用します.

  • 関数テーブルは、欠落した値にテーブルを返すユーザー定義関数です.

  • 関数は引数を指定することができるので、引数の値に基づいて条件WHEREを追加して、結リンゴ値を変更することができます.

  • 関数テーブルの動作はサブクエリと似ています.

  • MySQLによると、CREATE FUNCTIONコマンドで関数を作成できます.

  • データベースで関数を作成する方法の詳細については、後で説明します.