SQL初心者です。
WHERE句とHAVING句の違いはなんとなく理解しているつもりになっていたのですが、SELECT句で付けた別名を使用できるかどうかに違いがあるんだな、と気づきました。
以下の3つの文について、それぞれなぜそのような結果になるのか教えていただきたいです。
sql
1-- WHERE 別名 → ORDER BY 別名 2-- ERROR 3 SELECT name, height AS 身長 4 FROM players 5 WHERE 身長 > 195 6ORDER BY 身長 DESC 7;
sql
1-- HAVING 別名 → ORDER BY 別名 2-- OK 3 SELECT name, height AS 身長 4 FROM players 5 HAVING 身長 > 195 6ORDER BY 身長 DESC 7; 8
sql
1-- ORDER BY 別名 → HAVING 別名 2-- ERROR 3 SELECT name, height AS 身長 4 FROM players 5ORDER BY 身長 DESC 6 HAVING 身長 > 195 7;
WHERE句で別名が使えないのは分かりましたが、なぜHAVING句で使ってもOKなのでしょうか。
またHAVING句をORDER BY句の下に記述するとエラーになる理由もさっぱり分かりません。
各句の実行される順序が関係しているような気がして検索してみたものの、
__ FROM → WHERE → GROUPBY → HAVING → SELECT → ORDERBY __
と書いてあり、それならSELECT句の別名が使えるのはORDERBY句だけのはずじゃないの?と余計混乱しました。
どなたか優しく教えていただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/25 02:08