SQLのビューとは?考え方から実際にできることまで解説!
DB analysis
SQLのビューとは?考え方から実際にできることまで解説!
アンドエンジニア編集部
2021.09.10
この記事でわかること
SQLのビューにより複雑なSQL文を簡素化して記述することが可能です
検索データの開示制限を加えることができ、情報の漏洩リスクを低減することができます
SQLのビューは参照の他、更新条件に従いデータ更新も可能です

SQLのビューとは?

SQL

SQLリレーショナルデータベース管理システム(RDBMS)で用いられるデータベース操作言語です。データベース操作言語とはデータの操作や定義を行う言語を指します。

SQLのビューとは1つもしくは複数の表から任意のデータを抽出したものです。さらに複数の表やビューのデータを組み合わせることもできます。実際の表は実表と言い、実際のDBのデータが含まれます。ビューは導出表と言い、仮想的な表を表します。ビューは実表を窓から覗いたイメージ実際のDBのデータを含みません

ビューのメリット

ビューのメリットはSELECT文が何度も出てくるSQLを簡素化し、メンテナンスしやすくしてくれます。

また機密情報を特定権限を持つユーザにだけ表示したい場合もビューのアクセス制御により、開示情報をコントロールすることができます。それにより情報漏洩リスクを最小に抑えることができます。

ビューでできること

ビューはDBデータに対して以下の抽出処理を行います。 ・DB表(テーブル)の行の抽出  RDBの選択(Selection)に相当します。 ・DB表(テーブル)の列の抽出  RDBの射影(Projection)に相当します。 ・複数のDB表(テーブル)の結合  RDBの結合(Join)に相当します。

加えてDBデータの更新も可能です。 ・DB表(テーブル)の更新  表のINSERTやUPDATEおよびDELETEに対応します。  更新条件に従い更新可能かどうか判断します(詳細は後述します)。

このように、ビューは多様な抽出処理に加えて更新処理でも利用できるので、セキュリティ保護しながらDBアクセスを簡素化することが可能です。

ビューの作成方法

ビューの作成はCREATE VIEWを使用します。 構文:  CREATE VIEW ビュー名 AS SELECT文のステートメント;  ビュー名 作成するビューの名前  SELECT文のステートメント ビューで使われるデータ抽出条件

ビューの削除方法

ビューの削除はDROP VIEWを使用します。このコマンドはビューの所有者が行います。 構文:  DROP VIEW ビュー名;

ビューで指定するSELECT文の使い方

SELECT文はデータの検索・抽出を行います。ビューはそのSELECT文ビュー名で定義するものです。

CREATE VIEWのSELECT文ステートメントではORDER BY指定できませんのでご注意ください。ORDER BYビューの作成時ではなく、ビューに対して実際にSELECTを行うする際に指定します。 構文: SELECT [ALL | DISTINCT] 列名 FROM “テーブル(表)名”  [WHERE 条件式]  [GROUP BY “カラム(列)名” [HAVING 条件式]];

SELECT文の構文は次の句と条件からなります。 ・SELECT句 SELECT文の実行によりデータの検索・抽出を行います。  [ALL | DISTINCT] ALL:デフォルト値、重複検索時もすべてを返します。           DISTINCT:重複を除きます。  列名 列名称・複数指定可、 * を指定すると全ての列を対象とします。 ・FROM句 テーブル(表)を指定します。  テーブル(表)名 複数のテーブルが指定可能です。 ・WHERE句 抽出条件を指定します。  条件式 演算子を用いた条件を指定します。 ・GROUP BY句 カラム(列)名のグループ化を行います。  HAVING句 GROUP BY句の集計結果に抽出条件を設定します。

使用例:ビューを使わない場合  SELECT * FROM 顧客テーブル WHERE 顧客ID <= 09200 ORDER BY 住所コード;  (顧客テーブルから顧客番号09200番以下の顧客情報を住所コードでソートし、全件表示します) 使用例:ビューを使う場合の処理  CREATE VIEW ビュー名 AS SELECT * FROM 顧客テーブル WHERE 顧客ID <= 09200;  (顧客テーブルから顧客番号09200番以下の顧客情報を全件表示するビューを作成します)  SELECT * FROM ビュー名 ORDER BY 住所コード;  (ビューを用いて、抽出結果を住所コードでソートします)

具体的なSQLのビューの使い方、参照方法は?

SQL analysis

ビューの参照方法は、ビュー名に対してSELECT文で抽出するだけです。その他のビューの使い方として以下のような作業が挙げられます。 ・ビューを変更することビューのデータを更新することビューのテーブルを結合することビューの詳細情報を確認すること

具体的な使い方は以降で説明していきます。

ビューの変更方法

ビューの変更はALTER VIEWまたはCREATE OR REPLACEを用います。 ALTER VIEWの使い方はCREATE VIEWと同じで、作成済みビューに対して行います。 構文:  ALTER VIEW ビュー名 AS SELECT文のステートメント;

CREATE OR REPLACEビューが存在しない場合CREATE VIEWと同じ動作となり、ビューを作成します。ビューが作成済みの場合ALTER VIEWと同じ動作となり、存在するビューに対する抽出条件を変更することができます。 CREATE OR REPLACEの使い方CREATE VIEWおよびALTER VIEWと同じです。 構文:  CREATE OR REPLACE VIEW ビュー名 AS SELECT文のステートメント;

なおPostgreSQLではALTERビューの補助属性を変更する目的で用います。PostgreSQLのCREATE OR REPLACE VIEWは同等の機能が提供されています。そのためビューの定義を更新する際にはCREATE OR REPLACE VIEWを用いてビューの変更を行います。

ビューの更新方法

これまでにビューの参照を中心に説明してきました。ビューの更新はINSERT文・UPDATE文・DELETE文を用います。

なお、以下のビューでは更新することができませんのでご注意ください。 更新データが特定できない可能性がある場合:DISTINCTを利用したビューの場合  変更行が特定できないため更新できません。 ・集計関数とGROUP BY句やHAVING句を利用したビューの場合  集約値は直接変更できません。 ・複数テーブルを統合したビューの場合  複数テーブルは直接変更できません。

同様に明示的に書き込み不可としている場合も、更新することができません。 明示的に書き込み不可としている場合:ビューをWITH READ ONLYを指定し、定義した場合  明示的に読み取りとしているため更新できません。

ビューのテーブル結合の方法

テーブル結合JOIN句を用いることにより抽出できます。必要に応じて内部結合(INNER JOIN)左外部結合(LEFT OUTER JOIN)右外部結合(RIGHT OUTER JOIN)全外部結合(FULL OUTER JOIN)交差結合(CROSS JOIN)を選択あるいは複合して利用します。

各結合の違いは以下のように分類されます。 ・内部結合(INNER JOIN)  テーブルそれぞれに存在する行を抽出します。 ・左外部結合(LEFT OUTER JOIN)  左テーブルに存在する行のみ抽出、右テーブルに存在しない場合は空白とします。 ・右外部結合(RIGHT OUTER JOIN)  右テーブルに存在する行のみ抽出、左テーブルに存在しない場合は空白とします。 ・全外部結合(FULL OUTER JOIN)  テーブルいずれかに存在する行を抽出、いずれかのテーブルに存在しない場合は空白とします。 ・交差結合(CROSS JOIN)  テーブルの抽出数の組み合わせ数すべてを抽出します。

また、複数のテーブルを結合する際にはテーブル結合条件ON句で記述します。 使用例:テーブルIDが共通のテーブルaとテーブルから抽出データを取込む例  CREATE VIEW ビュー名 AS  SELECT 抽出データ,, FROM テーブルa JOIN テーブルb ON USING(テーブルID) ;

ビューの詳細情報の確認方法

ビューの詳細情報の確認方法は、DBMSの実装によって異なります。以下に代表的なDBMSのビューの定義の確認方法をまとめておきます。

Oracleの場合  USER_VIEWを検索することで定義内容を確認することができます。  用法:   SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME = "ビュー名"; ・MySQLの場合  SHOW CREATE VIEWで定義内容を確認することができます。  用法:   SHOW CREATE VIEW ビュー名 ・PostgreSQLの場合  pg_viewsからdefinitionを抽出することで定義内容を確認することができます。  用法:   SELECT definition FROM pg_views WHERE viewname = ‘ビュー名'; ・SQLServerの場合  information_schema.viewsを抽出することで定義内容を確認することができます。  用法:   SELECT * FROM information_schema.views WHERE TABLE_NAME = 'ビュー名';

SQLのビューを使ってSQL文を効果的に使用しましょう

efficiency

SQLのビューは繰り返し発生するSELECT文単純化することが可能です。さらに実データが伴わない仮想テーブルですので、セキュリティリスクが低減できます。1度ビューを作成すると他の抽出でも転用できますので、ビューを活用SQL文を効率的に使用することをおすすめします。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT