WHERE句の条件指定に関して正しい記述はどれですか。
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 は「値がない」状態であり、= や != などの比較演算子では判定できない点が頻出の落とし穴です。