SQL・PostgreSQL実務 問題集・練習問題クイズ

収録問題 40問 / 10問ランダム出題

SQL 結合 集約 transaction index 実行計画 lock backup 権限 PostgreSQL運用
SQL・PostgreSQL実務の10問クイズに挑戦

ランダムに出題・即時フィードバック・間違えた問題の復習機能付き

クイズをはじめる →

SQL・PostgreSQL実務のおすすめ教材を見る →

収録テーマ一覧(全40問)

Q1

employees表から全列ではなくnameとemailだけ取得したい。適切なSELECTは?

答え: SELECT name, email FROM employees

必要な列を明示すると転送量と依存範囲を抑えられます。

Q2

activeがtrueの行だけ取得したい。使う句は?

答え: WHERE active = true

WHEREは集約前の行を条件で絞ります。

Q3

created_atの新しい順に並べたい。適切なのは?

答え: ORDER BY created_at DESC

DESCは降順で日時なら新しい値が先になります。

Q4

結果を最大100行に制限したい。PostgreSQLで使う句は?

答え: LIMIT 100

LIMITは返却行数の上限を指定します。

Q5

NULLかどうかを正しく判定する条件は?

答え: column IS NULL

NULLは通常の等価比較ではなくIS NULLを使います。

Q6

customerが存在しない注文も残してcustomer情報を結合したい。適切なのは?

答え: ordersからcustomersへのLEFT JOIN

LEFT JOINは左側の全行を保ち、一致しない右列をNULLにします。

Q7

両tableで一致する行だけ取得したい。一般的なjoinは?

答え: INNER JOIN

INNER JOINはjoin条件が一致する組だけを返します。

Q8

部署ごとの社員数を集計したい。基本形は?

答え: GROUP BY department_idとCOUNT(*)

GROUP BYで部署単位にまとめCOUNTで各groupの行数を数えます。

Q9

集約後、社員数が10人以上の部署だけ残したい。使う句は?

答え: HAVING COUNT(*) >= 10

HAVINGはGROUP BY後の集約結果をfilterします。

Q10

重複するcategory値を除いて一覧したい。適切なのは?

答え: SELECT DISTINCT category

DISTINCTは選択列の重複行を除きます。

Q11

値がNULLなら0を返したい。適切な関数は?

答え: COALESCE(value, 0)

COALESCEは左から最初の非NULL値を返します。

Q12

条件に応じて表示labelを変えたい。標準SQLの式は?

答え: CASE WHEN ... THEN ... END

CASE式は条件分岐した値をquery内で生成します。

Q13

文字列の部分一致を検索する基本演算子は?

答え: LIKE

LIKEは%や_のwildcardでpatternを照合します。

Q14

2つのSELECT結果を重複除去して結合したい。適切なのは?

答え: UNION

UNIONは互換列の結果を結合し重複を除きます。

Q15

安全にuser入力をWHERE条件へ渡す方法は?

答え: driverのparameterized queryを使う

parameter bindingは値とSQL構文を分離しinjectionを防ぎます。

Q16

複数の更新を全て成功時だけ確定したい。使う仕組みは?

答え: transaction

transaction内で成功時COMMIT、失敗時ROLLBACKします。

Q17

transaction内で一部地点まで戻せるようにしたい。使うものは?

答え: SAVEPOINT

SAVEPOINTを作るとtransaction全体を終えずその地点までrollbackできます。

Q18

新規rowへ自動採番primary keyを付ける現代的な定義は?

答え: GENERATED ... AS IDENTITY

identity columnはsequenceを利用した標準的な自動採番を提供します。

Q19

email列の重複登録をDBで防ぎたい。適切なconstraintは?

答え: UNIQUE

UNIQUE constraintは指定列の重複を拒否します。

Q20

orderが存在しないcustomer_idを参照するのを防ぎたい。使うconstraintは?

答え: FOREIGN KEY

FOREIGN KEYは参照先keyの存在を保証します。

Q21

大量INSERTを効率化し全件を別々にcommitしたくない。基本方針は?

答え: batch/COPYを使い適切な単位でtransaction化する

batchやCOPYはround tripとcommit overheadを減らします。

Q22

queryの実際の実行計画と時間を確認したい。適切なのは?

答え: EXPLAIN ANALYZE

EXPLAIN ANALYZEはqueryを実行しactual row数や時間を表示するため副作用に注意します。

Q23

WHERE user_id = ?が頻繁で選択性が高い。検討するものは?

答え: user_idへのindex

適切なindexは対象rowへのアクセス量を減らせます。

Q24

indexを増やしすぎる主な欠点は?

答え: INSERT/UPDATE/DELETEの保守costとstorageが増える

各writeで関連indexも更新されるため、利用queryに基づき選びます。

Q25

複合index(a,b)が特に役立つqueryは?

答え: aで絞り、必要に応じてbも条件にするquery

B-tree複合indexは左端列から利用しやすく、列順はqueryに合わせます。

Q26

行が頻繁に更新・削除されるtableでVACUUMが必要な理由は?

答え: dead tupleを再利用可能にしMVCC管理を維持する

PostgreSQL MVCCでは古いrow versionが残るためVACUUM/autovacuumが回収を進めます。

Q27

planner統計を更新したい。使うcommandは?

答え: ANALYZE

ANALYZEはdata分布統計を収集しplannerの見積りに使われます。

Q28

長時間transactionが運用上問題になり得る理由は?

答え: 古いrow versionの回収を妨げ、lockやbloatへ影響する

長いsnapshotはVACUUMの回収を制限し、保持lockも競合を招く場合があります。

Q29

同じrowを複数処理者が同時取得しないjob queueで役立つ構文は?

答え: FOR UPDATE SKIP LOCKED

SKIP LOCKEDは他transactionがlock中のrowを飛ばし、queue workerの競合を減らせます。

Q30

接続数が増えDB資源を圧迫している。一般的な対策は?

答え: connection poolを使い上限とtimeoutを設ける

poolは接続を再利用しDBへの同時接続を制御します。

Q31

復旧可能性を担保するbackup運用として適切なのは?

答え: 定期backupに加えrestore testと保持方針を運用する

backupは実際にrestoreできることを別環境で検証して初めて有効です。

Q32

ある時点直前まで復旧するPITRに必要な代表要素は?

答え: base backupと連続的に保管したWAL

base backupへWALをreplayして指定時点まで復元します。

Q33

application userへtable操作権限を与える基本方針は?

答え: 必要なschema/table操作だけGRANTする

最小権限によりcredential漏えい時の影響を限定します。

Q34

applicationとmigrationでDB roleを分ける利点は?

答え: 通常処理にDDL権限を与えず変更権限を限定できる

runtime roleをread/writeに限定しschema変更は管理経路へ分離できます。

Q35

replicaを参照queryへ使う際に注意する点は?

答え: replication lagにより最新writeがまだ見えない可能性

非同期replicationではread-after-write整合性が保証されない場合があります。

Q36

productionで危険なDDLを行う前の適切な準備は?

答え: lock影響・実行時間・rollback/restore手順を検証する

DDLはlockやtable rewriteを伴う場合があるため事前検証と監視が必要です。

Q37

遅いquery調査でapplication側情報と結び付けるため有効なのは?

答え: query duration、request ID、parameterを秘匿したcontextを記録する

相関IDとdurationを安全に記録するとtraceとDB統計を結び付けられます。

Q38

deadlock発生時のapplication対応として適切なのは?

答え: transactionをrollbackし、必要なら限定回数retryする

DBはdeadlock解消のため一方を中止するので、短いtransactionと一貫したlock順序も見直します。

Q39

OFFSETが非常に大きいpaginationの問題は?

答え: 読み飛ばすrowが増え遅くなり、同時更新で結果もずれ得る

安定したsort keyを使うkeyset paginationを検討します。

Q40

個人情報を含むproduction dataを開発環境で使う際の方針は?

答え: 原則使わず、必要なら承認済み匿名化・最小化dataを使う

開発環境へのdata持出しは漏えいriskを増やすため匿名化とaccess制御が必要です。

certdrill.dev は、LPI Japan・IPA・AWS・Microsoft Azure その他各試験団体と一切関係のない独立した非公式学習サイトです。問題・解説はオリジナルコンテンツです。