SQL4 択難易度 応用

注文の無いユーザーも残し、支払済の注文だけを付けたい。条件の場所は?

正答

  1. WHERE 句に o.status = 'paid' を書く
  2. HAVING 句に o.status = 'paid' を書く
  3. LEFT JOIN の ON 句に o.status = 'paid' を書く
  4. ON と WHERE のどちらに書いても結果は同じ

解説

LEFT JOIN では、右側の表に対する条件を ON に書けば「条件に合う注文だけを付け、無ければ NULL」になる。同じ条件を WHERE に書くと、注文の無いユーザーの o.status は NULL で比較が偽になり、その行自体が消えて INNER JOIN と同じ結果になる。INNER JOIN では ON と WHERE のどちらに書いても結果は同じだが、LEFT JOIN では意味が変わる。HAVING はグループを絞る句で用途が異なる。

参考: www.sqlite.org

joinleft-joinon-vs-where

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ