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