DDLを使用した表とそのリレーションシップの管理44 / 50 問

以下の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 = FALSE;
A1行✓
B2行
C3行
Dエラーになる
正解:A解説

Oracle Database 23ai以降は、SQLでBOOLEAN型の列を定義できます(BOOLと記述することも可能です)。
BOOLEAN型の列には、TRUE/FALSEのキーワードのほか、文字列や数値を真偽値に変換して格納できます。
BOOLEAN型に格納できる値

真偽値指定できる値の例
TRUETRUE、'true'、'yes'、'on'、'y'、't'、1、'1'
FALSEFALSE、'false'、'no'、'off'、'n'、'f'、0、'0'
NULLNULL(UNKNOWN)

今回の各行は次のように格納されます。

TASK_ID指定した値格納される値
1TRUETRUE
2'no'FALSE
31TRUE
4NULLNULL
5'yes'TRUE

BOOLEAN型の列は、WHERE NOT is_doneのように比較演算子なしで条件に指定できます。また、WHERE is_done = FALSEでも指定できます。
4の行はNULLのため、is_done = FALSEの結果はFALSEではなくUNKNOWN(不明)になり、返されません。

SELECT task_id FROM tasks WHERE is_done = FALSE;

TASK_ID
--------
2

前後の問題