以下のSQL文で、何行のデータが返されますか。
CREATE TABLE tasks (
task_id NUMBER,
is_done BOOLEAN
);
INSERT INTO tasks
VALUES (1, TRUE), (2, 'no'), (3, 1), (4, NULL), (5, 'yes');
SELECT task_id FROM tasks WHERE is_done;A1行
B3行✓
C5行
Dエラーになる
正解:B解説
Oracle Database 23ai以降は、SQLでBOOLEAN型の列を定義できます(BOOLと記述することも可能です)。
BOOLEAN型の列には、TRUE/FALSEのキーワードのほか、文字列や数値を真偽値に変換して格納できます。
BOOLEAN型に格納できる値
| 真偽値 | 指定できる値の例 |
|---|---|
| TRUE | TRUE、'true'、'yes'、'on'、'y'、't'、1、'1' |
| FALSE | FALSE、'false'、'no'、'off'、'n'、'f'、0、'0' |
| NULL | NULL(UNKNOWN) |
今回の各行は次のように格納されます。
| TASK_ID | 指定した値 | 格納される値 |
|---|---|---|
| 1 | TRUE | TRUE |
| 2 | 'no' | FALSE |
| 3 | 1 | TRUE |
| 4 | NULL | NULL |
| 5 | 'yes' | TRUE |
BOOLEAN型の列は、WHERE is_doneのように比較演算子なしで条件に指定できます。また、WHERE is_done = TRUEでも指定できます。
条件がTRUEの行だけが返されるため、TASK_IDが2と4は返されず、3行が返されます。
SELECT task_id FROM tasks WHERE is_done;
TASK_ID
--------
1
3
5 FALSEの行を取得したい場合はWHERE NOT is_done、NULLの行を取得したい場合はWHERE is_done IS NULLと記述します。