DDLを使用した表とそのリレーションシップの管理43 / 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;
A1行
B3行✓
C5行
Dエラーになる
正解:B解説

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 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と記述します。

前後の問題