基本情報技術者試験 過去問(データベース-データ操作) -情報処理シンプルまとめ

情報処理技術者試験 過去問(データ操作)のブログのアイキャッチ画像 データベース

 情報処理技術者試験(今のところは基本情報技術者試験)の過去問(データベース-データ操作)を集めて,シンプルにまとめています。関係演算(射影(projection),選択(selection),直積,結合(join),自然結合,ソートマージ結合法),SQL(SELECT文,参照制約,LIKE述語,グループ化,集合関数,並べ替え,副問合せ,相関副問合せ,ビュー,CREATE文,UPDATE文,埋込みSQL,カーソル),JDBCについて,理解度を確認することができます。解けなかった問題や,完全に理解できていない問題については,【参考】にあるリンク先ページを読んで,もう一度,解いてみてください。難しい問題もあると思いますが,繰り返し解くことにより,だんだんと身に付いてきますので,根気よく頑張りましょう。

  1. 平成24年度 基本情報技術者試験 秋期 午前 問31
  2. 平成22年度 基本情報技術者試験 秋期 午前 問33
  3. 平成23年度 基本情報技術者試験 秋期 午前 問32
  4. 令和元年度 基本情報技術者試験 秋期 午前 問27
  5. (類似)平成22年度 基本情報技術者試験 秋期 午前 問30
  6. (令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24
  7. 平成31年度 基本情報技術者試験 春期 午前 問28
  8. 平成26年度 基本情報技術者試験 春期 午前 問27
  9. 平成30年度 基本情報技術者試験 秋期 午前 問28
  10. 平成28年度 基本情報技術者試験 春期 午前 問27
  11. 平成23年度 基本情報技術者試験 秋期 午前 問35
  12. 平成21年度 基本情報技術者試験 春期 午前 問34
  13. 平成26年度 基本情報技術者試験 秋期 午前 問24
  14. 平成24年度 基本情報技術者試験 秋期 午前 問25
  15. 平成23年度 基本情報技術者試験 特別 午前 問27
  16. 平成21年度 基本情報技術者試験 春期 午前 問29
  17. 平成29年度 基本情報技術者試験 春期 午前 問27
  18. (令和4年度) 基本情報技術者試験 サンプル問題 科目A 問21
  19. 平成24年度 基本情報技術者試験 春期 午前 問29
  20. 平成29年度 基本情報技術者試験 秋期 午前 問27
  21. 平成24年度 基本情報技術者試験 春期 午前 問31
  22. 平成25年度 基本情報技術者試験 春期 午前 問27
  23. 平成23年度 基本情報技術者試験 特別 午前 問30
  24. 平成25年度 基本情報技術者試験 春期 午前 問29
  25. 平成28年度 基本情報技術者試験 秋期 午前 問28
  26. 平成24年度 基本情報技術者試験 春期 午前 問30
  27. 平成31年度 基本情報技術者試験 春期 午前 問29
  28. 平成28年度 基本情報技術者試験 秋期 午前 問29
  29. 平成27年度 基本情報技術者試験 秋期 午前 問28
  30. 令和元年度 基本情報技術者試験 秋期 午前 問26
  31. 平成31年度 基本情報技術者試験 春期 午前 問27
  32. 平成25年度 基本情報技術者試験 春期 午前 問28
  33. 平成21年度 基本情報技術者試験 秋期 午前 問33
  34. 平成26年度 基本情報技術者試験 春期 午前 問28
  35. 平成22年度 基本情報技術者試験 春期 午前 問31
  36. 平成24年度 基本情報技術者試験 秋期 午前 問29
  37. 平成23年度 基本情報技術者試験 特別 午前 問31
  38. 平成21年度 基本情報技術者試験 春期 午前 問33
  39. 平成22年度 基本情報技術者試験 秋期 午前 問31
  40. 平成23年度 基本情報技術者試験 特別 午前 問32
  41. 平成30年度 基本情報技術者試験 春期 午前 問28
  42. まとめ

平成24年度 基本情報技術者試験 秋期 午前 問31

平成22年度 基本情報技術者試験 秋期 午前 問33

 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。ここで,ア~エの記述におけるデータの並びは,それぞれの表の列の並びと同順とする。

「平成24年度 基本情報技術者試験 秋期 午前 問31」の問題_画像01

ア “顧客” 表の行 「平成24年度 基本情報技術者試験 秋期 午前 問31」の問題_画像02 を削除する。

イ “注文” 表に行 「平成24年度 基本情報技術者試験 秋期 午前 問31」の問題_画像03 を追加する。

ウ “注文” 表に行 「平成24年度 基本情報技術者試験 秋期 午前 問31」の問題_画像04 を追加する。

エ “注文” 表の行 「平成24年度 基本情報技術者試験 秋期 午前 問31」の問題_画像05 を削除する。

【解答】

【解説】

■ 外部キー(foreign key)

関連する他の表の特定の属性(列)を参照する属性(または属性の組)のことをいい,次のような制約(参照制約)がある。

  • 外部キーの値が,関連する他の表(被参照表)に存在しなければならない(参照制約)

※ 参照制約とは,データの矛盾を起こすような,行の追加・変更・削除を制約することをいう

「平成24年度 基本情報技術者試験 秋期 午前 問31」の解答_画像

ア “注文” 表に “顧客番号” が “L035” の行がないので削除できる

イ “顧客番号” が “D010” の行は “顧客” 表にあるので追加できる

ウ “顧客番号” が “F020” の行は “顧客” 表にないので追加できない(追加すると整合性を損なう)

エ “注文” 表のデータは,どの行も削除可能

平成23年度 基本情報技術者試験 秋期 午前 問32

 同じ属性から成る関係RとSがある。RとSの属性値の一部が一致する場合,関係演算 R-(R-S) と同じ結果が得られるものはどれか。ここで,-は差集合,∩は共通集合,∪は和集合,×は直積,÷は商の演算を表す。

ア R∩Sイ R∪Sウ R×Sエ R÷S

【解答】

【解説】

ベン図を使用するとよい。

「平成23年度 基本情報技術者試験 秋期 午前 問32」の解答_画像

令和元年度 基本情報技術者試験 秋期 午前 問27

(類似)平成22年度 基本情報技術者試験 秋期 午前 問30

 関係モデルにおいて,関係から特定の属性だけを取り出す演算はどれか。

ア 結合(join)イ 射影(projection)
ウ 選択(selection)エ 和(union)

【解答】

【解説】

■ 射影(projection)

表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

「(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24」の解答_画像

(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24

平成31年度 基本情報技術者試験 春期 午前 問28

 関係モデルにおいて表Xから表Yを得る関係演算はどれか。

「(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24」の問題_画像
ア 結合(join)イ 射影(projection)
ウ 選択(selection)エ 併合(merge)

【解答】

【解説】

■ 射影(projection)

表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

「(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24」の解答_画像

平成26年度 基本情報技術者試験 春期 午前 問27

 関係データベースの操作のうち,射影(projection)の説明として,適切なものはどれか。

ア ある表の照会結果と,別の表の照会結果を合わせて一つの表にする。

イ 表の中から特定の条件に合致した行を取り出す。

ウ 表の中から特定の列だけを取り出す。

エ 二つ以上の表の組から条件に合致した組同士を合わせて新しい表を作り出す。

【解答】

【解説】

■ 射影(projection)

表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

「(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問24」の解答_画像

ア 和(union)

イ 選択(selection)

エ 結合(join)

平成30年度 基本情報技術者試験 秋期 午前 問28

平成28年度 基本情報技術者試験 春期 午前 問27

 関係XとYを自然結合した後,関係Zを得る関係代数演算はどれか。

「平成30年度 基本情報技術者試験 秋期 午前 問28」の問題_画像
ア 射影と和イ 選択ウ 選択と射影エ 選択と和

【解答】

【解説】

関係XとYを自然結合した表は,

「平成30年度 基本情報技術者試験 秋期 午前 問28」の解答_画像

のようになる。この表から関係Zの表を得るには,①選択演算により学部名が情報学部の行を抽出して,②射影演算により学部名と学生番号,氏名を抽出すればよい。

平成23年度 基本情報技術者試験 秋期 午前 問35

平成21年度 基本情報技術者試験 春期 午前 問34

 関係データベースの操作の説明のうち,適切なものはどれか。

ア 結合は,二つ以上の表を連結して,一つの表を生成することをいう。

イ 射影は,表の中から条件に合致した行を取り出すことをいう。

ウ 選択は,表の中から特定の列を取り出すことをいう。

エ 挿入は,表に対して特定の列を挿入することをいう。

【解答】

【解説】

■ 結合(join)

2つの表が持つ同じ列(属性)同士で結合して新しい表を作る関係演算である。

内部結合2つの表に存在するレコード同士を結合して取り出す
外部結合2つの表に存在するレコード同士は結合して取り出し,基準となる表にだけ存在するレコードについては,そのまま取り出す
「平成23年度 基本情報技術者試験 秋期 午前 問35」の解答_画像

イ 射影は,表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

ウ 選択は,表の中から条件を満たす行を取り出して新しい表を作る関係演算である。

エ 挿入は,表に対して特定の行を挿入する操作である。

平成26年度 基本情報技術者試験 秋期 午前 問24

平成24年度 基本情報技術者試験 秋期 午前 問25

平成23年度 基本情報技術者試験 特別 午前 問27

平成21年度 基本情報技術者試験 春期 午前 問29

 ある企業では,顧客マスタファイル,商品マスタファイル,担当者マスタファイル及び当月受注ファイルを基にして,月次で受注実績を把握している。各ファイルの項目が表のとおりであるとき,これら四つのファイルを使用して当月分と直前の3か月分の出力が可能な受注実績はどれか。

「平成26年度 基本情報技術者試験 秋期 午前 問24」の問題_画像
ア 顧客別の商品別受注実績イ 商品別の顧客別受注実績
ウ 商品別の担当者別受注実績エ 担当者別の顧客別受注実績

【解答】

【解説】

ア 出力できない(顧客別商品別に出力できるのは,当月受注ファイルの当月分の受注額だけ(顧客(顧客コード)と受注した商品(商品コード)が関連付けられている)。前月受注額,2か月前受注額,3か月前受注額に関しては,顧客と商品それぞれのデータしかないので,顧客別商品別に出力することはできない)

イ 出力できない(商品マスタファイルは顧客と関連付けられていない)

ウ 出力できない(商品マスタファイルは担当者と関連付けられていない)

エ 出力できる(顧客マスタファイルの各顧客(顧客コード)には担当者(担当者コード)が関連付けられているので,担当者別顧客別に集計できる)

平成29年度 基本情報技術者試験 春期 午前 問27

 RDBMSが二つの表を結合する方法のうち,ソートマージ結合法に関する記述はどれか。

ア 一方の表の結合する列がインデックスに含まれている場合,もう一方の表の結合する列とインデックスの値で結合する。

イ 一方の表の結合する列の値でハッシュ表を作成し,もう一方の表の結合する列と結合する。

ウ 一方の表の結合する列の値を順に読み出し,もう一方の表の結合する列と結合する。

エ 結合する列の値で並べ替えたそれぞれの表の行を,先頭から順に結合する。

【解答】

【解説】

■ ソートマージ結合法

結合するそれぞれの表を比較対象の列の値で並べ替えて,先頭から順に結合する。

イ ハッシュ結合法

【参考】

(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問21

平成24年度 基本情報技術者試験 春期 午前 問29

 RDBMSにおけるビューに関する記述のうち,適切なものはどれか。

ア ビューとは,名前を付けた導出表のことである。

イ ビューに対して,ビューを定義することはできない。

ウ ビューの定義を行ってから,必要があれば,その基底表を定義する。

エ ビューは一つの基底表に対して一つだけ定義できる。

【解答】

【解説】

■ ビュー

表から作成される仮想的な表である。仮想的な表なので,データは持たない。

イ ビューからビューを定義することもできる

ウ (基底)表を定義してからビューを定義する

エ 1つの(基底)表から複数のビューを定義できる

平成29年度 基本情報技術者試験 秋期 午前 問27

 SQL文において FOREIGN KEY と REFERENCES を用いて指定する制約はどれか。

ア キー制約イ 検査制約ウ 参照制約エ 表明

【解答】

【解説】

■ 表制約

主キーや外部キーが複数の列(属性)から構成される場合に使用する(主キーや外部キーが1つの列から構成される場合でも使用できる)。

※ 列制約は,1つの列に対する制約なので,主キーや外部キーが複数の列から構成される場合は定義できない。

一意性制約(主キー)PRIMARY KEY (主キーを構成する列名のリスト)
参照制約(外部キー)FOREIGN KEY (外部キーを構成する列名のリスト)
REFERENCES 被参照表名 [(列名のリスト)]

平成24年度 基本情報技術者試験 春期 午前 問31

 表Rに対する次のSQL文の操作はどの関係演算か。

「平成24年度 基本情報技術者試験 春期 午前 問31」の問題_画像

〔SQL文〕

SELECT A1,A3,A5 FROM R

ア 結合イ 差ウ 射影エ 直積

【解答】

【解説】

問題のSQL文を実行すると,

“R” 表から “A1”,“A3”,“A5” を抽出する

という表が得られる。

■ 射影(projection)

表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

平成25年度 基本情報技術者試験 春期 午前 問27

 列A1~A5から成るR表に対する次のSQL文は,関係代数のどの演算に対応するか。

SELECT A1,A2,A3 FROM R

WHERE A4 = ‘a’

ア 結合と射影イ 差と選択ウ 選択と射影エ 和と射影

【解答】

【解説】

問題のSQL文を実行すると,

“R” 表から「A4 = ‘a’」という条件を満たす行の “A1”,“A2”,“A3” を抽出する

という表が得られる。

■ 選択(selection)

表の中から条件を満たす行を取り出して新しい表を作る関係演算である。

■ 射影(projection)

表の中から指定した列(属性)を取り出して新しい表を作る関係演算である。

平成23年度 基本情報技術者試験 特別 午前 問30

 次の表は,営業担当者のある年度の販売実績である。この表の第1期から第4期の販売金額の平均が4,000万円以上で,どの期でも3,000万円以上販売している営業担当者の名前を求めるSQL文として,適切なものはどれか。ここで,金額の単位は千円とする。

「平成23年度 基本情報技術者試験 特別 午前 問30」の問題_画像

ア SELECT 名前 FROM 販売実績

WHERE (第1期 + 第2期 + 第3期 + 第4期) / 4 >= 40000 OR

第1期 >= 30000 OR 第2期 >= 30000 OR

第3期 >= 30000 OR 第4期 >= 30000

イ SELECT 名前 FROM 販売実績

WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 40000 AND

第1期 >= 30000 AND 第2期 >= 30000 AND

第3期 >= 30000 AND 第4期 >= 30000

ウ SELECT 名前 FROM 販売実績

WHERE 第1期 > 40000 OR 第2期 > 40000 OR

第3期 > 40000 OR 第4期 > 40000 AND

第1期 >= 30000 OR 第2期 >= 30000 OR

第3期 >= 30000 OR 第4期 >= 30000

エ SELECT 名前 FROM 販売実績

WHERE (第1期 + 第2期 + 第3期 + 第4期) >= 160000 AND

第1期 >= 30000 AND 第2期 >= 30000 AND

第3期 >= 30000 AND 第4期 >= 30000

【解答】

【解説】

ア 第1期から第4期の販売金額の平均が4,000万円以上,または,第1期から第4期の販売金額のいずれかが3,000万円以上の行が抽出される。

イ 第1期から第4期の販売金額の合計が4,000万円以上,かつ,第1期から第4期の販売金額のすべてが3,000万円以上の行が抽出される。

ウ 第1期から第4期の販売金額のいずれかが4,000万円より大きく,かつ,第1期から第4期の販売金額のいずれかが3,000万円以上の行が抽出される。

エ 第1期から第4期の販売金額の合計が16,000万円以上,かつ,第1期から第4期の販売金額のいずれかが3,000万円以上の行が抽出される(第1期から第4期の販売金額の合計を4で割ると平均になる)。

平成25年度 基本情報技術者試験 春期 午前 問29

 “BOOKS” 表から書名に “UNIX” を含む行を全て探すために次のSQL文を用いる。aに指定する文字列として,適切なものはどれか。ここで,書名は “BOOKS” 表の “書名” 列に格納されている。

SELECT * FROM BOOKS WHERE 書名 LIKE ‘   a  

ア %UNIXイ %UNIX%ウ UNIXエ UNIX%

【解答】

【解説】

■ LIKE述語

列の値(文字列)が,指定したパターンに一致するかどうかを調べる場合に使用する。

パターン意味
%任意の0文字以上の文字と一致’麻%’
’%美’
’%友%’
「麻」で始まる(前方一致)
「美」で終わる(後方一致)
「友」を含む(任意一致)
_任意の1文字と一致’麻_ _’「麻」で始まる3文字

たとえば,次の「2023年度打撃成績(上位5傑)表」から,「選手名」が「あお」で始まる行の「選手番号」と「選手名」を抽出するSQL文は,次のようになる。

「平成25年度 基本情報技術者試験 春期 午前 問29」の解答_画像

平成28年度 基本情報技術者試験 秋期 午前 問28

 関係代数の演算のうち,関係R,Sの直積(R×S)に対応するSELECT文はどれか。ここで,関係R,Sを表R,Sに対応させ,表R及びSにそれぞれ行の重複はないものとする。

ア SELECT * FROM R,S

イ SELECT * FROM R EXCEPT SELECT * FROM S

ウ SELECT * FROM R UNION SELECT * FROM S

エ SELECT * FROM R INTERSECT SELECT * FROM S

【解答】

【解説】

■ FROM句

データを抽出する対象となる表(または,ビュー)を指定する。指定する表(または,ビュー)が1つの場合は,その表(または,ビュー)を次のWHERE句に渡す。複数の場合は,それらの表(または,ビュー)から直積を作成し,次のWHERE句に渡す。

イ R-S(差)

ウ R∪S(和)

エ R∩S(積)

平成24年度 基本情報技術者試験 春期 午前 問30

 “注文” 表と “製品” 表に対して,次のSQL文を実行したときに得られる結果はどれか。

SELECT 製品名,数量 FROM 注文,製品

WHERE 注文.製品コード = 製品.製品コード

「平成24年度 基本情報技術者試験 秋期 午前 問30」の問題_画像01
ア 「平成24年度 基本情報技術者試験 秋期 午前 問30」の問題_画像02イ 「平成24年度 基本情報技術者試験 秋期 午前 問30」の問題_画像03
ウ 「平成24年度 基本情報技術者試験 秋期 午前 問30」の問題_画像04エ 「平成24年度 基本情報技術者試験 秋期 午前 問30」の問題_画像05

【解答】

【解説】

“注文” 表と “製品” 表を「注文.製品コード = 製品.製品コード」という条件で結合すると,

「平成24年度 基本情報技術者試験 春期 午前 問30」の解答_画像01

となる。ここから,“製品名” と “数量” を抽出すると,

「平成24年度 基本情報技術者試験 春期 午前 問30」の解答_画像02

となる。

平成31年度 基本情報技術者試験 春期 午前 問29

 “学生” 表と “学部” 表に対して次のSQL文を実行した結果として,正しいものはどれか。

「平成31年度 基本情報技術者試験 春期 午前 問29」の問題_画像01

〔SQL文〕

SELECT 氏名 FROM 学生,学部

WHERE 所属 = 学部名 AND 学部.住所 = ‘新宿’

ア 「平成31年度 基本情報技術者試験 春期 午前 問29」の問題_画像01イ 「平成31年度 基本情報技術者試験 春期 午前 問29」の問題_画像03ウ 「平成31年度 基本情報技術者試験 春期 午前 問29」の問題_画像04エ 「平成31年度 基本情報技術者試験 春期 午前 問29」の問題_画像05

【解答】

【解説】

“学生” 表と “学部” 表を「所属 = 学部名」という条件で結合すると,

「平成31年度 基本情報技術者試験 春期 午前 問29」の解答_画像01

となる。ここから,「学部.住所 = ‘新宿’」という条件で行を抽出すると,

「平成31年度 基本情報技術者試験 春期 午前 問29」の解答_画像02

となる。最後に,「氏名」列を抽出すると,

「平成31年度 基本情報技術者試験 春期 午前 問29」の解答_画像03

となる。

平成28年度 基本情報技術者試験 秋期 午前 問29

 “社員” 表と “部門” 表に対して,次のSQL文を実行したときの結果はどれか。

SELECT COUNT(*) FROM 社員,部門

WHERE 社員.所属 = 部門.部門名 AND 部門.フロア = 2

「平成28年度 基本情報技術者試験 秋期 午前 問29」の問題_画像
ア 1イ 2ウ 3エ 4

【解答】

【解説】

“社員” 表と “部門” 表を「社員.所属 = 部門.部門名」という条件で結合すると,

「平成28年度 基本情報技術者試験 秋期 午前 問29」の解答_画像01

となる。ここから,「部門.フロア = 2」という条件で行を抽出すると,

「平成28年度 基本情報技術者試験 秋期 午前 問29」の解答_画像02

となり,行数は,

3

となる。

平成27年度 基本情報技術者試験 秋期 午前 問28

 “出庫記録” 表に対するSQL文のうち,最も大きな値が得られるものはどれか。

「平成27年度 基本情報技術者試験 秋期 午前 問28」の問題_画像

ア SELECT AVG(数量) FROM 出庫記録 WHERE 商品番号 = ‘NP200’

イ SELECT COUNT(*) FROM 出庫記録

ウ SELECT MAX(数量) FROM 出庫記録

エ SELECT SUM(数量) FROM 出庫記録 WHERE 日付 = ‘2015-10-11’

【解答】

【解説】

ア “出庫記録” 表から「商品番号 = ‘NP200’」という条件で行を抽出すると,

「平成27年度 基本情報技術者試験 秋期 午前 問28」の解答_画像01

となる。ここから,数量の平均値を求めると,

(3 + 1) ÷ 2 = 2

となる。

イ “出庫記録” 表の行数は4行である。

ウ “出庫記録” 表の数量の最大値は3である。

エ “出庫記録” 表から「日付 = ‘2015-10-11’」という条件で行を抽出すると,

「平成27年度 基本情報技術者試験 秋期 午前 問28」の解答_画像02

となる。ここから,数量の合計値を求めると,

1 + 2 = 3

となる。

令和元年度 基本情報技術者試験 秋期 午前 問26

 “得点” 表から,学生ごとに全科目の点数の平均を算出し,平均が80点以上の学生の学生番号とその平均点を求める。aに入れる適切な字句はどれか。ここで,実線の下線は主キーを表す。

得点(学生番号科目,点数)

〔SQL文〕

SELECT 学生番号,AVG(点数)

FROM 得点

GROUP BY    a   

ア 科目 HAVING AVG(点数) >= 80

イ 科目 WHERE 点数 >= 80

ウ 学生番号 HAVING AVG(点数) >= 80

エ 学生番号 WHERE 点数 >= 80

【解答】

【解説】

■ グループ化と集合関数

同じ値でグループ化して1つにまとめる場合は,グループ化する列をGROUP BY句に指定する。GROUP BY句を使用した場合,SELECT句には,GROUP BY句に指定した列名,集合関数,定数のみ指定できる。また,グループの中から特定のグループを抽出する場合は,HAVING句に抽出条件を記述する。

集合関数は,抽出されたグループに対して集計する。HAVING句とSELECT句に指定することができる。

SUM(列名)指定した列でグループごとに合計を求める
AVG(列名)指定した列でグループごとに平均を求める
MAX(列名)指定した列でグループごとに最大値を求める
MIN(列名)指定した列でグループごとに最小値を求める
COUNT(*)行の総数(データの件数)を求める
COUNT(列名)指定した列でグループごとにNULL値(空値)でない行の総数(データの件数)を求める

※ 集合関数を入れ子にすることはできない

※ SUM関数とAVG関数に指定する列のデータ型は整数型でなければならない

※ NULL値(空値)は,集計の対象にならない

※ 「列名」だけでなく,算術式を指定することもできる

たとえば,次の「年度別打撃成績(本塁打)表」から,「選手番号」と「選手名」でグループ化し,「本塁打の合計」が「30」以上のグループの,「選手番号」,「選手名」と「本塁打の合計」を抽出するSQL文は,次のようになります。

「令和元年度 基本情報技術者試験 秋期 午前 問26」の解答_画像

GROUP BY句を使用した場合,SELECT句には,

  • GROUP BY句に指定した列
  • 集合関数
  • 定数

のみ指定できる。

平成31年度 基本情報技術者試験 春期 午前 問27

平成25年度 基本情報技術者試験 春期 午前 問28

 “中間テスト” 表からクラスごと,教科ごとの平均点を求め,クラス名,教科名の昇順に表示するSQL文中のaに入れる字句はどれか。

中間テスト(クラス名,教科名,学生番号,名前,点数)

〔SQL文〕

SELECT クラス名,教科名,AVG(点数) AS 平均点

FROM 中間テスト

   a   

ア GROUP BY クラス名,教科名 ORDER BY クラス名,AVG(点数)

イ GROUP BY クラス名,教科名 ORDER BY クラス名,教科名

ウ GROUP BY クラス名,教科名,学生番号 ORDER BY クラス名,教科名,平均点

エ GROUP BY クラス名,平均点 ORDER BY クラス名,教科名

【解答】

【解説】

■ グループ化と集合関数

同じ値でグループ化して1つにまとめる場合は,グループ化する列をGROUP BY句に指定する。GROUP BY句を使用した場合,SELECT句には,GROUP BY句に指定した列名,集合関数,定数のみ指定できる。また,グループの中から特定のグループを抽出する場合は,HAVING句に抽出条件を記述する。

集合関数は,抽出されたグループに対して集計する。HAVING句とSELECT句に指定することができる。

SUM(列名)指定した列でグループごとに合計を求める
AVG(列名)指定した列でグループごとに平均を求める
MAX(列名)指定した列でグループごとに最大値を求める
MIN(列名)指定した列でグループごとに最小値を求める
COUNT(*)行の総数(データの件数)を求める
COUNT(列名)指定した列でグループごとにNULL値(空値)でない行の総数(データの件数)を求める

※ 集合関数を入れ子にすることはできない

※ SUM関数とAVG関数に指定する列のデータ型は整数型でなければならない

※ NULL値(空値)は,集計の対象にならない

※ 「列名」だけでなく,算術式を指定することもできる

たとえば,次の「年度別打撃成績(本塁打)表」から,「選手番号」と「選手名」でグループ化し,「本塁打の合計」が「30」以上のグループの,「選手番号」,「選手名」と「本塁打の合計」を抽出するSQL文は,次のようになります。

「令和元年度 基本情報技術者試験 秋期 午前 問26」の解答_画像

GROUP BY句を使用した場合,SELECT句には,

  • GROUP BY句に指定した列
  • 集合関数
  • 定数

のみ指定できる。

■ 並べ替え

抽出した行やグループを並べ替える場合は,並べ替え対象の列をORDER BY句に指定する。

※ 昇順に並べ替える場合は「ASC(または省略)」,降順に並べ替える場合は「DESC」を指定する

たとえば,次の「年度別打撃成績(打率)表」を「打率」の降順に並べ替えて,「年」と「打率」を抽出するSQL文は,次のようになる。

「平成31年度 基本情報技術者試験 春期 午前 問27」の解答_画像02

平成21年度 基本情報技術者試験 秋期 午前 問33

 SQLの構文として,正しいものはどれか。

ア SELECT 注文日,AVG(数量)

FROM 注文明細

イ SELECT 注文日,AVG(数量)

FROM 注文明細

GROUP BY 注文日

ウ SELECT 注文日,AVG(SUM(数量))

FROM 注文明細

GROUP BY 注文日

エ SELECT 注文日

FROM 注文明細

WHERE SUM(数量) > 1000

GROUP BY 注文日

【解答】

【解説】

ア GROUP BY句に注文日を指定していないのに,SELECT句に注文日と集合関数を指定している。

ウ 集合関数(AVG,SUM)を入れ子にすることはできない。

エ WHERE句で集合関数(SUM)を使用することはできない。

平成26年度 基本情報技術者試験 春期 午前 問28

平成22年度 基本情報技術者試験 春期 午前 問31

 “商品” 表,“在庫” 表に対する次のSQL文の結果と同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。

SELECT 商品番号 FROM 商品

WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫)

「平成26年度 基本情報技術者試験 春期 午前 問28」の問題_画像

ア SELECT 商品番号 FROM 在庫

WHERE EXISTS (SELECT 商品番号 FROM 商品)

イ SELECT 商品番号 FROM 在庫

WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)

ウ SELECT 商品番号 FROM 商品

WHERE EXISTS (SELECT 商品番号 FROM 在庫

WHERE 商品.商品番号 = 在庫.商品番号)

エ SELECT 商品番号 FROM 商品

WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫

WHERE 商品.商品番号 = 在庫.商品番号)

【解答】

【解説】

問題のSQL文を実行すると,

“在庫” 表から “商品番号” を抽出し,

その結果のいずれかと,“商品” 表の “商品番号が” 一致しなかった場合に,その行の “商品番号” を抽出する

という表が得られる(“商品” 表の “商品番号” の中で,“在庫” 表の “商品番号” と一致しない行が抽出される)。

ア “在庫” 表から “商品番号” を検索(主問合せ)して,その結果を1行ずつ “商品” 表の “商品番号” と比較し,一致する行が1行以上あれば真と,1行もなければ偽と評価(副問合せ)して,結果が真の行の “商品番号” を(“在庫” 表から)抽出する(“在庫” 表の “商品番号” の中で,“商品” 表の “商品番号” と一致する行が抽出される)。

イ “在庫” 表から “商品番号” を検索(主問合せ)して,その結果を1行ずつ “商品” 表の “商品番号” と比較し,一致する行が1行以上あれば偽と,1行もなければ真と評価(副問合せ)して,結果が真の行の “商品番号” を(“在庫” 表から)抽出する(“在庫” 表の “商品番号” の中で,“商品” 表の “商品番号” と一致しない行が抽出される)。

ウ “商品” 表から “商品番号” を検索(主問合せ)して,その結果を1行ずつ “在庫” 表から「商品.商品番号 = 在庫.商品番号」という条件で抽出された行の “商品番号” と比較し,一致する行が1行以上あれば真と,1行もなければ偽と評価(副問合せ)して,結果が真の行の “商品番号” を(“商品” 表から)抽出する(“商品” 表の “商品番号” の中で,“在庫” 表の “商品番号” と一致する行が抽出される)。

エ “商品” 表から “商品番号” を検索(主問合せ)して,その結果を1行ずつ “在庫” 表から「商品.商品番号 = 在庫.商品番号」という条件で抽出された行の “商品番号” と比較し,一致する行が1行以上あれば偽と,1行もなければ真と評価(副問合せ)して,結果が真の行の “商品番号” を(“商品” 表から)抽出する(“商品” 表の “商品番号” の中で,“在庫” 表の “商品番号” と一致しない行が抽出される)。

平成24年度 基本情報技術者試験 秋期 午前 問29

平成23年度 基本情報技術者試験 特別 午前 問31

 “商品” 表のデータが次の状態のとき,〔ビュー定義〕で示すビュー “収益商品” の行数が減少する更新処理はどれか。

「平成24年度 基本情報技術者試験 秋期 午前 問29」の問題_画像

〔ビュー定義〕

CREATE VIEW 収益商品

AS SELECT * FROM 商品

WHERE 売値 – 仕入値 >= 40000

ア 商品コードがS001の売値を130,000に更新する。

イ 商品コードがS003の仕入値を150,000に更新する。

ウ 商品コードがS005の売値を130,000に更新する。

エ 商品コードがS005の仕入値を90,000に更新する。

【解答】

【解説】

ア 商品コードがS001の「売値-仕入値」の値が50,000から30,000となり,40,000未満になるのでビューに表示されなくなる(ビューの行数が減少する)。

イ 商品コードがS003の「売値-仕入値」の値が30,000から50,000となり,40,000以上になるのでビューに表示されるようになる(ビューの行数が増加する)。

ウ 商品コードがS005の「売値-仕入値」の値が60,000から50,000となるが,40,000以上なのでビューに表示されたまま(ビューの行数は変化しない)。

エ 商品コードがS005の「売値-仕入値」の値が60,000から50,000となるが,40,000以上なのでビューに表示されたまま(ビューの行数は変化しない)。

平成21年度 基本情報技術者試験 春期 午前 問33

 関係データベースの “製品” 表と “売上” 表から,売上報告のビュー表を定義するSQL文中のaに入るものはどれか。

CREATE VIEW 売上報告(製品番号,製品名,納品数,売上年月日,売上金額)

AS   a   製品.製品番号,製品.製品名,売上.納品数,売上.売上年月日,売上.納品数 * 製品.単価

FROM 製品,売上

WHERE 製品.製品番号 = 売上.製品番号

「平成21年度 基本情報技術者試験 春期 午前 問33」の問題_画像
ア GRANTイ INSERTウ SCHEMAエ SELECT

【解答】

【解説】

■ ビューの定義

表から作成される仮想的な表である。仮想的な表なので,データは持たない。「CREATE VIEW文」を使用して定義する。

CREATE VIEW ビュー名 [(列名1,列名2,…)]

AS SELECT …

※ ビューの列名は,AS句のSELECT文の列名と一致しなければならない(ビューの列名を省略すると,SELECT文の列名がビューの列名となる)

※ SELECT文の詳細は後述

ビューは,仮想的な表ではあるが,内容を更新すれば表(実表)にも反映される(次の条件を満たす場合)。

  • 1つの表から作成されている
  • SELECT句に,算術式,集合関数を含まず,DISTINCTの指定がない
  • WHERE句に副問合せがない
  • GROUP BY句やHAVING句を含まない

■ ビュー定義の例

「平成21年度 基本情報技術者試験 春期 午前 問33」の解答_画像

平成22年度 基本情報技術者試験 秋期 午前 問31

 “商品” 表に対してデータの更新処理が正しく実行できるUPDATE文はどれか。ここで,“商品” 表は次のCREATE文で定義されている。

CREATE TABLE 商品

(商品番号 CHAR(4),商品名 CHAR(20),仕入先番号 CHAR(6),単価 INT,

PRIMARY KEY(商品番号))

「平成22年度 基本情報技術者試験 秋期 午前 問31」の問題_画像

ア UPDATE 商品 SET 商品番号 = ‘S001’ WHERE 商品番号 = ‘S002’

イ UPDATE 商品 SET 商品番号 = ‘S006’ WHERE 商品名 = ‘C’

ウ UPDATE 商品 SET 商品番号 = NULL WHERE 商品番号 = ‘S002’

エ UPDATE 商品 SET 商品名 = ‘D’ WHERE 商品番号 = ‘S003’

【解答】

【解説】

ア,イ “商品番号” は主キーであるので,値の重複は許されない(一意性制約が満たされなくなる)

ウ “商品番号” は主キーであるので,NULL値(空値)は許されない

平成23年度 基本情報技術者試験 特別 午前 問32

 Javaのアプリケーションプログラムがデータベースにアクセスするための標準的なAPI(Application Program Interface)はどれか。

ア HTMLイ Java VMウ JDBCエ SQL

【解答】

【解説】

■ JDBC(Java DataBase Connectivity)

JavaプログラムからデータベースにアクセスするためのAPI。SQL文によりデータを読み書きしたりすることができる。

【参考】

平成30年度 基本情報技術者試験 春期 午前 問28

 次の埋込みSQLを用いたプログラムの一部において,Xは何を表す名前か。

EXEC SQL OPEN X;

EXEC SQL FETCH X INTO :NAME,:DEPT,:SALARY;

EXEC SQL UPDATE 従業員

SET 給与 = 給与 * 1.1

WHERE CURRENT OF X;

EXEC SQL CLOSE X;

ア カーソルイ スキーマウ テーブルエ ビュー

【解答】

【解説】

■ 埋込みSQL

C言語などのホスト言語(親言語)で書かれたソースコードの中にSQL文を記述したものをいう。

● 埋込み変数(ホスト変数)

埋込みSQL文で参照されるホスト言語の変数のことをいう。

※ SQLの列名と区別するために,変数名の手前に「:」を付ける

■ カーソル

SELECT文の検索結果が複数行の場合に,データを1行ずつ取り出すために使用する。

カーソルの定義DECLARE カーソル名 CURSOR FOR
  SELECT …
カーソルのオープンOPEN カーソル名
データ(行)の取り出しFETCH カーソル名 INTO :埋込み変数
カーソルのクローズCLOSE カーソル名

まとめ

 今回は,情報処理技術者試験の過去問(データベース-データ操作)を集めて,シンプルにまとめてみました。みなさん,どのくらい解けましたか?はじめは難しく感じると思いますが,繰り返し解くことにより,少しずつ理解できるようになると思います(8割以上(できれば9割以上)解けるようになるまで頑張りましょう)。また,解けるようになっても時間が経つと忘れることもありますので,たとえば,1週間後とか,1か月後とかに,また,やってみてください。