あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「SQLでのビュー作成の基礎」を解説します。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
※編集部注:前回記事「SQLで「テーブル作成」を行う」はこちら
出題頻度 午前II:●-- 午後I:●-- 午後II:●--
●--:過去14年間での過去問出題数が1〜9回
●●-:過去14年間での過去問出題数が10〜19回
●●●:過去14年間での過去問出題数が20回以上
●ビューの概念、CREATE VIEW、DROP VIEW、更新可能なビュー
ビュー(VIEW)とは、テーブルの特定部分や複数テーブルを結合し、ユーザに必要な部分だけをあたかも一つのテーブルであるかのように見せるための、仮想的なテーブルの概念です。ビューの実体はデータを持たないSQL文であり、CREATE TABLE文で作成する物理的なテーブルとは異なります。
まずはそのイメージと特徴を押さえましょう。
以下がビューを作成するためのSQL文とその構築イメージです。
構文 | CREATE VIEW ビュー名(列名1, 列名2, …) AS SELECT 文 WITH CHECK OPTION |
---|---|
ビュー名 | ビュー名を定義。 |
列名 | ビューとして表示する列名 ※括弧ごと省略が可能 |
SELECT文 | ビューとして表示する内容を指定するSQL文。 WITH CHECK OPTION(省略可能)を指定すると、指定したSQL文の表示条件に合わないデータは、ビューから追加できなくなる。 |
DROP VIEW文でビューを削除することができます。
構文 | DROP VIEW ビュー名 |
---|---|
ビュー名 | 削除するビューの名前を指定 |
ビューからデータを追加・更新・削除する場合、あたかもテーブルのデータを操作するように記述することができますが、条件によっては追加・更新・削除できない場合があります。
UPDATE 山田さん発注商品 SET 商品='卵' WHERE 商品='たまご'
上記SQL文の例では、以下の「条件3」に合致するため、実行時にエラーとなります。
条件1 | ビューの定義に集約関数を含む。(集約値なので直接変更できない) |
---|---|
条件2 | ビューの定義にGROUP BY句、HAVING句を含む。(同上) |
条件3 | 複数の表を結合している。(複数表の結合なので直接変更はできない) |
条件4 | 副問合せで同一の表を参照している。(変更する行を特定できない) |
条件5 | DISTINCTを利用している。(変更する行を特定できない) |
条件6 | ビュー定義時にWITH READ ONLYの指定をしている。(読み取り専用) |
「このビューは更新可能か?」について問う問題は、午前試験で非常に多く出題されますので、条件1〜6を必ず覚えておきましょう。
尚、ビューには、アクセス権限を付与・管理することで、ユーザがアクセス可能なデータを一元管理するという、セキュリティ上の目的があることも意識しておいて下さい。これに関する問題が平成19年度午後I問3で出題されました。
本試験過去問題による類題演習 | |
---|---|
□H25 午前II問11 | CREATE文により作成したビューを実行可能なSQL文(Chance問題) |
□H16 午前問33 | SQL文による更新可能なビューの作成 |
□H15 午前問33 | SQL文による更新可能なビューの作成(「注文」表と「商品」表) |
□H18 午前問31 | 4つの表から注文一覧表ビューを作成するSQL文 |
□H24 午前II問9 | ビュー“ 商品別出荷実績”にSQLを実行した結果の値 |
更新可能なビューの定義はどれか。ここで、ビュー定義の中で参照する表は全て更新可能とする。
(H20春DB午前問37)
ア
CREATE VIEW VIEW1(SNO, PNO) AS SELECT DISTINCT SPJ.SNO, SPJ.PNO FROM SPJ
イ
CREATE VIEW VIEW2(SNO, PNO) AS SELECT SPJ.SNO, SPJ.PNO FROM SPJ GROUP BY SPJ.SNO, SPJ.PNO
ウ
CREATE VIEW VIEW3(SNO, STATUS, CITY) AS SELECT S.SNO, S.STATUS, S.CITY FROM S WHERE S.STATUS > 15
エ
CREATE VIEW VIEW4(SCITY, PCITY) AS SELECT S.CITY, P.CITY FROM S, SPJ, P WHERE S.SNO = SPJ.SNO AND SPJ.PNO = P.PNO
解答 Point check ウ
*囲み内をクリックすると解答を表示します(表示後ページをリロードすると、再び非表示になります)
Copyright © ITmedia, Inc. All Rights Reserved.