注文の無いユーザーも残し、支払済の注文だけを付けたい。条件の場所は?
正答
- WHERE 句に o.status = 'paid' を書く
- HAVING 句に o.status = 'paid' を書く
- LEFT JOIN の ON 句に o.status = 'paid' を書く
- ON と WHERE のどちらに書いても結果は同じ
解説
LEFT JOIN では、右側の表に対する条件を ON に書けば「条件に合う注文だけを付け、無ければ NULL」になる。同じ条件を WHERE に書くと、注文の無いユーザーの o.status は NULL で比較が偽になり、その行自体が消えて INNER JOIN と同じ結果になる。INNER JOIN では ON と WHERE のどちらに書いても結果は同じだが、LEFT JOIN では意味が変わる。HAVING はグループを絞る句で用途が異なる。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ