データの制限とソート複数選択6

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 は「値がない」状態であり、=!= などの比較演算子では判定できない点が頻出の落とし穴です。