1.やさしい
CHECK 制約は何をしますか?
- Aテーブルの行数を数える
- Bユーザーのパスワードを検証する
- C値が条件を満たさない行を拒否する
- Dクエリを実行する前に、テーブルが存在するかどうかを確認する
2.やさしい
既存のテーブルに新しい列を追加する文はどれですか?
- AUPDATE TABLE
- BINSERT COLUMN
- CALTER TABLE
- DCREATE COLUMN
3.やさしい
すでに存在する行の値を変更する SQL 文はどれですか?
- AUPDATE
- BMODIFY
- CREPLACE COLUMN
- DINSERT
4.ふつう
SQL インジェクション(SQL injection)とは何ですか?
- Aインデックスを追加する方法
- Bデータベースのバックアップ手法
- C1 つの INSERT 文で多数の行を高速に挿入する方法
- Dユーザー入力によって SQL クエリの構造が変えられてしまう攻撃
5.ふつう
WHERE EXISTS (subquery) が行について真になるのはどのような場合ですか?
- Aサブクエリがちょうど 1 行を返す場合
- Bサブクエリが NULL 値を返さない場合
- Cサブクエリが少なくとも 1 行を返す場合
- Dサブクエリが 0 より大きい数を返す場合
6.ふつう
共通テーブル式(WITH name AS (...))は何を提供しますか?
- A削除されるまでディスクに保存され続ける恒久的なテーブル
- B列に対するインデックス
- C1 つの文の中で使える、名前付きの一時的な結果
- D新しいデータベースユーザー
7.むずかしい
トランザクション T1 は行 A をロックして行 B を待ち、T2 は行 B をロックして行 A を待っています。一般的な DBMS はどうしますか?
- Aデッドロックを検出し、一方のトランザクションを犠牲として中止する
- B両方のトランザクションを同時にコミットする
- C一方がふつうにコミットするまで、両方のトランザクションを待たせる
- D2 つのトランザクションを 1 つにまとめる
8.むずかしい
テーブルに 100 万行あり、ブール型の列 is_active はそのうち 95% で TRUE です。WHERE is_active = TRUE について、オプティマイザが is_active のインデックスを無視することがあるのはなぜですか?
- Aオプティマイザは WHERE 句でインデックスを決して使わないから
- Bブール型の列にはインデックスを作れないから
- Cインデックスでは TRUE が NULL として扱われるから
- Dほとんどの行が一致するので、多数のインデックス検索より全表スキャンのほうが安いから
解答
- 1. C · 値が条件を満たさない行を拒否する
- 2. C · ALTER TABLE
- 3. A · UPDATE
- 4. D · ユーザー入力によって SQL クエリの構造が変えられてしまう攻撃
- 5. C · サブクエリが少なくとも 1 行を返す場合
- 6. C · 1 つの文の中で使える、名前付きの一時的な結果
- 7. A · デッドロックを検出し、一方のトランザクションを犠牲として中止する
- 8. D · ほとんどの行が一致するので、多数のインデックス検索より全表スキャンのほうが安いから
ステップごとの詳しい解答:このトピックは examproblems.com で練習できます。