連載
» 2005年08月31日 00時00分 公開

基本情報技術者試験講座(4):SQLでデータベースを操作しよう

エンジニアなら避けては通れない、情報処理技術者試験。すべての試験の基礎となるのは、基本情報技術者試験だ。そのうちの午前試験に必要な知識を本連載でマスターし、秋期試験合格を目指そう!

[有限会社 G.F.インフィニティ,Project - ∞]

 前回「システム開発とLANの基礎を押さえる」では、「3.システムの開発と運用」および「4.ネットワーク技術」について解説しました。今回は「5.データベース技術」を取り上げます。

1. コンピュータ科学基礎
2. コンピュータシステム
3. システムの開発と運用
4. ネットワーク技術
5. データベース技術
6. セキュリティと標準化
7. 情報化と経営
8. 監査

データベース技術


確認しておく内容

  • リレーショナルデータベース管理システム(RDBMS)
  • SQL言語
  • トランザクション

リレーショナルデータベース管理システム(RDBMS)

 データベースとは、大量のデータを整理して蓄積管理したもので、簡単に目的のデータを検索できる仕組みを持ちます。データベースの種類には、階層型、ネットワーク型、リレーショナル型があります。現在主流となっているのはリレーショナル型で、データを行と列で構成される2次元の表で管理するデータベースです。

 リレーショナルデータベースでは、例えば社員番号列や部署番号列などのデータをキーにして、複数の表のデータの関連付けを容易に行うことができます。

 リレーショナルデータベースを管理するソフトウェアは、リレーショナルデータベース管理システム(RDBMS:Relational Database Management System)と呼ばれます。リレーショナルを関係と訳して、関係データベース管理システムと呼ばれることもあります。

 それでは、問題を解いてみましょう。

 ■問題1

関係データベースの説明として適切なものを次の中から選択してください。

a.データは2次元表で表現し、表同士に親子関係を持たせる
b.データは木構造で表現し、レコード間の関係は親子関係を用いて表現する
c.データは網構造で表現し、子が複数の親を持つことができる
d.データは2次元表で管理し、各レコード間の関係は相互のレコード中の値を利用して関連付けられる

正解:d

 ■解説

 リレーショナルデータベースはデータを2次元の表で管理し、データの各行(レコード)は主キーによって一意に識別されます。また、外部キーを使用して複数の表のデータを関連付けることが可能です。従って選択肢dが正解となります。

 複数の表の関連付けが必須なわけではないので、選択肢aは不正解です。

 選択肢bは階層型データベース、選択肢cはネットワーク型データベースの説明となっています。

 主キーおよび外部キーは、表の各データを関連付けるために利用されます。

 図1の商品一覧表の主キーは「商品番号」列です。各行は主キーによって一意に識別できますので、商品番号が分かればデータを特定できることになります。

 ほかの表との関連付けのために使用される列を外部キーと呼びます。図1では、商品一覧表と受注表のデータを関連付けるため、2つの表に共通する列である商品番号列を外部キーとして使用しています。

図1 主キーと外部キー 図1 主キーと外部キー

 リレーショナルデータベースの機能である関係演算についての問題も頻出するので、取り上げておきます。

 関係演算とは、リレーショナルデータベースからデータを抽出(検索)する処理のことで、射影、選択、結合が基本になります。

演算
イメージと説明
射影

特定の列だけを抽出する
(SELECT文のSELECT句で射影の列を限定する)

選択

特定の行だけを抽出する
(SELECT文のWHERE句で選択する行を限定する)

結合

複数の表を列値(キー)によって結合する
(SELECT文のFROM句で複数表を指定し、WHERE句で結合するための条件を指定する)

表1 関係演算

 ■問題2

関係データベースの操作の1つである「射影」について正しく説明しているものを次の中から選択してください。

a.表中から特定の属性だけを抜き出す
b.表中から特定の組だけを抜き出す
c.2つ以上の表の組から条件に一致した組同士を結合する
d.表中の主キー列から一意な値を抜き出す

正解:a

 ■解説

 射影とは、表から特定の列(属性)だけを検索する処理のことです。従って、選択肢aが正解です。

 表から特定の行(組)だけを検索する処理を選択(選択肢b)、複数の表から関係するデータを1つに結合して検索する処理を結合(選択肢c)と呼びます。

 この問題のように、列のことを「属性」、行のことを「組」と呼ぶことがあります。

SQL言語

 SQL(Structured Query Language:構造化問い合わせ言語)とは、リレーショナルデータベースを操作するための言語です。

 SQLは、DDL(Data Definition Language:データ定義言語)、DML(Data Manipulation Language:データ操作言語)、DCL(Data Control Language:データ制御言語)から構成されています。

 ここにすべてを示すことはできませんが、以下のコマンドの分類は覚えておきましょう。

DML DDL DCL
SELECT 検索 CREATE 作成 COMMIT 確定
INSERT 挿入 ALTER 変更 ROLLBACK 取り消し
UPDATE 更新 DROP 削除   
DELETE 削除   
表2 SQLコマンドの分類

 このほか、アクセス権限を定義するためのGRANT(権限付与)、REVOKE(権限取り消し)などもあります。

 午前試験では、上記のコマンドのうちSELECT文を利用した問題がよく出されます。構文や使用方法をしっかり押さえておきましょう。

  • SELECT文の基本構文
SELECT 列名
FROM 表名
WHERE 検索条件
GROUP BY グループ列名
ORDER BY ソート列名
→検索する列名を指定(全列検索の場合は*を指定)
→検索する列を含む表名を指定
→検索条件を指定
→データのグループ化を行うための列名を指定
→データの並べ替えを行うための列名を指定

※上記のうち、SELECT句およびFROM句の使用は必須、そのほかはオプション(省略可能)です。

 ■問題3

下記のSQL文の中から、データ定義言語(DDL)に分類されるものを選択してください。

a.COMMIT
b.DELETE
c.CREATE
d.INSERT

正解:c

 ■解説

 選択肢のうち、データ定義言語(DDL)に分類されるコマンドはCREATEのみです。正解は選択肢cです。CREATEは、表やビューなどのオブジェクトやスキーマの作成などにも使用するコマンドです。

 COMMIT(選択肢a)はデータ制御言語(DCL)、DELETE(選択肢b)とINSERT(選択肢d)はデータ操作言語(DML)に分類されます。SQL文の分類は覚えておきましょう。

 ■問題4

社員表に対して、下記のSQL文を実行します。結果として得られるデータを選択してください。

SELECT 社員番号 FROM 社員

WHERE 部署番号 > 300 AND 給与 <= 320000 ;


社員番号 社員名 給与 部署番号
100010 沢木翔一 210000 302
100011 野田奈央子 330000 301
100012 黒沢さおり 270000 202
100013 野村雅也 320000 301
100014 児玉亮 350000 101

a.100010
b.100013
c.100010、100013
d.100011、100013

正解:c

 ■解説

 SELECT文のWHERE句に条件式を記述した場合、その条件式を満たすデータのみ、つまり条件式が真(TRUE)であると判断されたデータのみを戻します。WHERE句には単一の条件式を記述するだけでなく、AND、OR、NOTを使用して複数の条件式を連結することもできます。

 この問題では、2つの条件式をANDで連結していますので、2つの条件式を共に満たすデータが検索されます。従って、「部署番号が300より大きい、かつ給与が320000以下」のデータが検索されます。

 演算子に関しては、「ANDは両方の条件がTRUEの場合にTRUE」「ORはいずれかの条件がTRUEの場合にTRUE」「NOTは条件を否定した場合にTRUE」となります。

 ■問題5

社員表から、社員名に「沢」の文字が含まれるデータを検索します。下記のSQL文中の [A] に入れるべき適切な条件式を選択してください。

SELECT 社員番号, 社員名, 部署番号 FROM 社員

WHERE [A] ;


社員番号 社員名 給与 部署番号
100010 沢木翔一 210000 302
100011 野田奈央子 330000 301
100012 黒沢さおり 270000 202
100013 野村雅也 320000 301
100014 児玉亮 350000 101

a.社員名 LIKE '_沢_'
b.社員名 LIKE '%沢%'
c.社員名 = '_沢_'
d.社員名 = '%沢%'

正解:b

■解説

 データが文字パターンと一致するか否かを比較するには、LIKE演算子を使用します。文字のパターンマッチングにはワイルドカード(%および_)を使用して条件式を作成します。

  • ワイルドカード
%
_
値の中の任意の複数文字(0文字以上)
値の中の任意の1文字

 前後が「%」であれば、データ中にその文字が含まれるという意味になります。正解は選択肢bの「社員名 LIKE '%沢%'」です。

 ■問題6

社員表および部署表に対して、下記のSQL文を実行します。結果として得られるデータを選択してください。

SELECT 社員名 FROM 社員, 部署

WHERE 部署番号 = 部署コード AND 所在地 = '東京' ;


社員表
社員番号 社員名 給与 部署番号
100010 沢木翔一 210000 302
100011 野田奈央子 330000 301
100012 黒沢さおり 270000 202
100013 野村雅也 320000 301
100014 児玉亮 350000 101

 

部署表
部署コード 部署名 所在地
101 人事 東京
201 総務 東京
202 総務 大阪
301 経理 東京
302 経理 大阪

a.野田奈央子
b.黒沢さおり、沢木翔一
c.児玉亮、野村雅也
d.児玉亮、野村雅也、野田奈央子

正解:d

 ■解説

 社員表と部署表を結合処理する問題です。結合条件はWHERE句の「部署番号 = 部署コード」、つまり共通する部署番号値によって結合を行っています。その中から「所在地 = '東京'」であるデータを結果として戻します。

 条件を満たすのは「児玉亮、野村雅也、野田奈央子」の3名で、正解は選択肢dです。

 ■問題7

社員表を検索し、以下の検索結果を得るために発行するSQL文を選択してください。

社員表
社員番号 社員名 給与 部署番号
100010 沢木翔一 210000 302
100011 野田奈央子 330000 301
100012 黒沢さおり 270000 202
100013 野村雅也 320000 301
100014 児玉亮 350000 101

 

検索結果
部署番号 社員番号 社員名
101 100014 児玉亮
202 100012 黒沢さおり
301 100011 野田奈央子
301 100013 野村雅也
302 100010 沢木翔一


a.SELECT 部署番号, 社員番号, 社員名 FROM 社員
  ORDER BY 部署番号, 社員番号 ;
b.SELECT 部署番号, 社員番号, 社員名 FROM 社員
  GROUP BY 部署番号 ;
c.SELECT 部署番号, 社員番号, 社員名 FROM 社員
  ORDER BY 社員番号, 部署番号 ;
d.SELECT 部署番号, 社員番号, 社員名 FROM 社員

  GROUP BY 社員番号 ;

正解:a

 ■解説

 検索結果は、社員表から部署番号、社員番号、社員名の3列を射影したものです。社員表とは列の並び順が異なっていますが、SELECT句で列を指定した順に表示されます。

 データは部署番号の昇順にソートされており、部署番号が同じ場合には社員番号の昇順にソートが行われています。

 データのソートにはORDER BY句を使用します。複数の列をORDER BY句に指定した場合は、まず初めに指定した列でソートし、最初の列値が同じものが、2番目に指定した列でソートされます。

 従って、SELECT文に「ORDER BY 部署番号, 社員番号」が含まれている選択肢aが正解となります。

トランザクション

図2 トランザクション処理 図2 トランザクション処理

 データ操作言語(DML文)による表データの操作は、1文ずつ操作を確定するのではなく、関連する一連の操作をまとめて確定させます。関連する一連の操作が確定できない場合には、その操作すべてを取り消すことでデータの整合性を維持します。このような一連の操作の単位をトランザクションと呼びます。

 トランザクションによる更新をすべて確定することをコミット、すべて取り消すことをロールバックと呼びます。それぞれCOMMIT文(確定)、ROLLBACK文(取り消し)を使用してトランザクションの管理を行います。


 図2のようなトランザクション処理の場合、(1)のINSERTおよび(2)のUPDATE処理は、次のCOMMITによって確定されます。(3)のDELETE処理はROLLBACKによって取り消されます。

 ■問題8

DBMSのトランザクションに関する説明のうち、適切なものを次の中から選択してください。

a.トランザクションとは、表にデータを入出力する単位である
b.トランザクションの終了はCOMMIT文、ROLLBACK文にて行う
c.トランザクションが異常終了した場合にはロールフォワードを行う
d.バックアップ以降の更新データを反映させ、障害発生前の状態に戻すためにROLLBACK文を発行する

正解:b

 ■解説

 トランザクション処理が成功した場合はCOMMIT文を発行し、処理を確定して終了します。また、トランザクション処理が失敗した場合はROLLBACK文を発行し、処理を取り消して終了します。この場合、トランザクション処理の開始直前の状態に戻されます。正解は選択肢bです。

 トランザクションを構成するDML文には、データを入出力するINSERT、SELECTの他にデータの更新に使用するUPDATEやデータの削除に使用するDELETE等のコマンドも含まれるため、選択肢aは不正解です。

 トランザクションが異常終了した場合に行うのはロールバック処理ですので、選択肢cは不正解です。

 バックアップファイルを利用し、障害発生前の状態に戻すために行うのはロールフォワード処理ですので、選択肢dは不正解です。

 このように、試験にはロールバック処理とロールフォワード処理の違いを問う問題も出されていますので、違いをしっかりと把握しておく必要があります。

  • ロールバック処理

 プログラムの異常などによる論理的な障害発生時に行う回復処理のことで、ROLLBACK文を発行し、トランザクション開始直前の状態に戻します。

  • ロールフォワード処理

 磁気ディスクの破損などによる物理的な障害発生時に行う回復処理のことで、バックアップファイルを利用し、障害発生前の状態に戻します。バックアップファイルとは、データベース復旧用にデータベースの内容を書き出したファイルのことで、通常は障害発生に備えて定期的に作成しておきます。

まとめ

 下記の内容をチェックしておきましょう。

  • データベースの種類(階層型、ネットワーク型、リレーショナル型)
  • リレーショナルデータベースの関係演算(射影、選択、結合)
  • SQL文の分類およびSELECT文の使用方法
  • トランザクションの制御(COMMIT文、ROLLBACK文)

次回は、「6.セキュリティと標準化」「7.情報化と経営」を取り上げます。

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、基本情報技術者試験(午前)をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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