ITパスポート テクノロジ系:データベース 3 — Questions and Answers
Question 1: SQLの「GROUP BY」句と「HAVING」句の組み合わせの説明として正しいものはどれか。
- GROUP BYで行をグループ化し、HAVINGでグループに対する集計条件を指定する (Correct answer)
- GROUP BYで並べ替え順を指定し、HAVINGで行を絞り込む
- HAVINGはWHEREと全く同じ役割でどちらでも使える
- GROUP BYなしにHAVINGを使用できる
Correct answer: GROUP BYで行をグループ化し、HAVINGでグループに対する集計条件を指定する
GROUP BYで指定列の値ごとに行をグループ化し、COUNT・SUM等の集計関数を適用。HAVINGはグループ化後の集計結果に対して条件を絞り込む(WHEREは集計前の絞り込み)。
Question 2: データベースの「デッドロック」の説明として正しいものはどれか。
- 複数のトランザクションが互いのロックを待ち合い永遠に処理を進められない状態 (Correct answer)
- データベースのディスクが満杯になった状態
- クエリの実行時間が長くなりすぎた状態
- 接続数の上限に達してアクセスできない状態
Correct answer: 複数のトランザクションが互いのロックを待ち合い永遠に処理を進められない状態
デッドロックはトランザクションAがリソースXをロックしYを待ち、トランザクションBがYをロックしXを待つ相互待ち状態。タイムアウト・ロック順序の統一・デッドロック検出等で対応。
Question 3: 第3正規形(3NF)の条件として正しいものはどれか。
- 第2正規形を満たし、非キー属性が他の非キー属性に関数従属(推移的関数従属)しない (Correct answer)
- 第1正規形を満たし、すべての列が主キーに完全従属している
- すべての属性が単一値を持つ
- すべての関数従属性が主キーからの完全従属のみである
Correct answer: 第2正規形を満たし、非キー属性が他の非キー属性に関数従属(推移的関数従属)しない
3NF(第3正規形)は①第2正規形を満たし②非キー属性Aが非キー属性Bに従属し、BがキーKに従属する(A→B→K)という推移的関数従属を排除した状態。
Question 4: SQLのサブクエリ(副問い合わせ)の説明として正しいものはどれか。
- 別のSQL文(SELECT文等)の中に埋め込んだSQL文で、内側から外側の順に実行される (Correct answer)
- 2つのテーブルを結合する操作
- テーブルに対して一括更新を行う操作
- インデックスを使わずに検索する方法
Correct answer: 別のSQL文(SELECT文等)の中に埋め込んだSQL文で、内側から外側の順に実行される
サブクエリはSELECT・FROM・WHERE句等の中に別のSELECT文を埋め込む構文。内側のサブクエリが先に実行されその結果を外側のクエリが使用する。スカラー・行・テーブルサブクエリがある。
Question 5: データベースのロールバック(ROLLBACK)の説明として正しいものはどれか。
- トランザクション開始以降の変更をすべて取り消してデータベースを元の状態に戻す操作 (Correct answer)
- トランザクションの変更を確定してデータベースに永続保存する操作
- テーブルのデータを全件削除する操作
- データベースのバックアップを復元する操作
Correct answer: トランザクション開始以降の変更をすべて取り消してデータベースを元の状態に戻す操作
ROLLBACKはトランザクション中に障害・エラーが発生した場合、そのトランザクション開始以降の変更をすべて取り消してデータベースを整合性のある状態に戻す操作。COMMITの対概念。
Question 6: カラム型データベースの特徴として正しいものはどれか。
- データを列(カラム)単位で格納するため集計・分析クエリで不要な列の読み込みを回避し高速化できる (Correct answer)
- 行(レコード)単位でデータを格納する伝統的なRDBと同じ方式
- 主にトランザクション処理(OLTP)に最適化されている
- KVS(Key-Value Store)の一種
Correct answer: データを列(カラム)単位で格納するため集計・分析クエリで不要な列の読み込みを回避し高速化できる
カラム型DB(BigQuery・Redshift・Apache Parquet等)はデータを列ごとに格納するため、分析クエリでの集計列のみ読み込み・圧縮効率の高さ・高速スキャンが実現できOLAP向き。
SQLの「GROUP BY」句と「HAVING」句の組み合わせの説明として正しいものはどれか。