検索
連載

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

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

Share
Tweet
LINE
Hatena

連載目次

ポケットスタディ データベーススペシャリスト [第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.

ページトップに戻る