状況
orders からテスト注文(is_test = 1)のうち、status が cancelled か failed のものだけを消す。DELETE の前に、同じ条件で件数を数える。
空欄に入る条件として正しいものは?
SELECT COUNT(*) AS n FROM ordersWHERE ____;正答
- is_test = 1 AND status = 'cancelled' OR status = 'failed'
- is_test = 1 AND status IN ('cancelled', 'failed')
- is_test = 1 OR status IN ('cancelled', 'failed')
- is_test = 1 AND status = 'cancelled' AND status = 'failed'
解説
SQL では AND が OR より優先されるため、選択肢 1 は (is_test = 1 AND status = 'cancelled') OR status = 'failed' と解釈され、本番の注文でも failed なら対象になる。このまま DELETE に流すと実際の注文が消える。status IN ('cancelled', 'failed') か括弧で OR をまとめるのが正しい。選択肢 3 はテスト注文でない行まで含み、選択肢 4 は 1 つの列が 2 つの値に同時に等しいことはないので 0 件になる。
参考: www.sqlite.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ