SQLで「ビュー作成」を行う「データベーススペシャリスト試験」戦略的学習のススメ(17)

あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「SQLでのビュー作成の基礎」を解説します。

» 2017年08月15日 05時00分 公開

連載目次

ポケットスタディ データベーススペシャリスト [第2版]

書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。

ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。


※編集部注:前回記事「SQLで「テーブル作成」を行う」はこちら

SQLによるビュー作成

出題頻度 午前II:●-- 午後I:●-- 午後II:●--


 ●--:過去14年間での過去問出題数が1〜9回
 ●●-:過去14年間での過去問出題数が10〜19回
 ●●●:過去14年間での過去問出題数が20回以上


Key Word

ビューの概念、CREATE VIEW、DROP VIEW、更新可能なビュー


ビューの概念

 ビュー(VIEW)とは、テーブルの特定部分や複数テーブルを結合し、ユーザに必要な部分だけをあたかも一つのテーブルであるかのように見せるための、仮想的なテーブルの概念です。ビューの実体はデータを持たないSQL文であり、CREATE TABLE文で作成する物理的なテーブルとは異なります。

 まずはそのイメージと特徴を押さえましょう。

ビューのイメージと特徴

CREATE VIEW文によるビューの作成

 以下がビューを作成するためのSQL文とその構築イメージです。

構文 CREATE VIEW ビュー名(列名1, 列名2, …)
    AS SELECT 文 WITH CHECK OPTION
ビュー名 ビュー名を定義。
列名 ビューとして表示する列名 ※括弧ごと省略が可能
SELECT文 ビューとして表示する内容を指定するSQL文。
WITH CHECK OPTION(省略可能)を指定すると、指定したSQL文の表示条件に合わないデータは、ビューから追加できなくなる。
ビューの構築イメージ

DROP VIEW文によるビューの削除

 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を実行した結果の値

Chance問題

Point check

更新可能なビューの定義はどれか。ここで、ビュー定義の中で参照する表は全て更新可能とする。

(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 

 *囲み内をクリックすると解答を表示します(表示後ページをリロードすると、再び非表示になります)

書籍紹介

ポケットスタディ データベーススペシャリスト [第2版]

ポケットスタディ データベーススペシャリスト [第2版]

具志堅融、河科湊著
秀和システム 1,500円

データベーススペシャリスト試験は同じパターンの出題が多いため、過去問をたくさん解くことが合格の早道です。しかし、難易度の高い過去問を解くには、勉強が必要であり、多くの時間と労力を必要とします。本書は、プロの講師が推奨する、テキストを少し読み→該当する過去問を解き→理解を深めるというアジャイル的学習法で、驚くほど短時間で合格するツボとコツを解説します。"すき間時間"を活用して効果的な学習ができます!


注文ページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。