SQL SELECT文を使用したデータの取得、制限およびソート複数選択6 / 50 問

WHERE句の条件指定に関して正しい記述はどれですか。

Asalary BETWEEN 1000 AND 2000は、1000と2000の両端を含む✓
Blast_name LIKE 'A%'は、Aで始まる任意の長さの文字列にマッチする✓
Clast_name LIKE 'A_'は、Aで始まる2文字ちょうどの文字列にマッチする✓
Ddepartment_id IN (10, 20, NULL)は、department_idがNULLの行にもマッチする
Ecommission_pct = NULLは、commission_pctがNULLの行を抽出する
正解:A・B・C解説

WHERE句の比較演算子と、特にNULLの扱いが論点です。
各選択肢の検討

  • A(正):BETWEEN x AND yは両端を含みます(>= x AND <= yと同じ)。
  • B(正):%は0文字以上の任意の文字列にマッチするワイルドカードです。
  • C(正):_(アンダースコア)は任意の1文字ちょうどにマッチします。よって'A_'は2文字の文字列にマッチします。
  • D(誤):INリストにNULLを含めても、NULLの行は抽出されません。department_id = NULLは真にならず、結果は常にUNKNOWNになるためです。
  • E(誤):= NULLではNULLの行を抽出できません。NULLの判定には**IS NULL**を使う必要があります。

LIKEのワイルドカード

記号意味
%0文字以上の任意の文字列
_任意の1文字

NULLの正しい判定

-- 誤り(1行も返らない)
SELECT * FROM employees WHERE commission_pct = NULL;

-- 正しい
SELECT * FROM employees WHERE commission_pct IS NULL;

NULLは「値がない」状態であり、=や!=などの比較演算子では判定できない点が頻出の落とし穴です。

前後の問題