WHERE์ ALIAS์ ์๋ธ์ฟผ๋ฆฌ ๊ด๋ จ ์ง๋ฌธ ๋๋ฆฝ๋๋ค
๋ง์ ์ง๋ฌธ์ ๊ผผ๊ผผํ ๋ต๋ณํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค:) ์ค๋ช
ํด์ฃผ์ ๋ด์ฉ๊ณผ ์ฌ์ดํธ๋ฅผ ์ฝ๊ณ ์๋์ฒ๋ผ ์ดํดํ๋๋ฐ, ํน์ ์๋ชป ์ดํดํ ๋ถ๋ถ์ด ์์๊น์? -------------------------------------------------------------------------- [ALIAS์ ๊ดํด ์ดํดํ ๋ด์ฉ] ALIAS๋ ์ปฌ๋ผ ALIAS์ ํ
์ด๋ธ ALIAS, 2์ข
๋ฅ๊ฐ ์๋ค. ์ปฌ๋ผ ALIAS๋ ์ฃผ๋ก SELECT์ ์์ ์ฌ์ฉ๋๋ค. -GROUP BY, HAVING, ORDER BY์ ์์ ์ฌ์ฉํ ์ ์๋ค -WHERE์ ์์ ์ฌ์ฉํ ์ ์๋ค ํ
์ด๋ธ ALIAS๋ ์ฃผ๋ก FROM์ ์๋ธ์ฟผ๋ฆฌ๋ JOINํ ๋ ์ฌ์ฉ๋๋ค. -(์ง๋ฌธ ๋ด์ฉ์ ์๋) dr์ FROM์ ์๋ธ์ฟผ๋ฆฌ์์ ์ปฌ๋ผ ALIAS๋ฅผ ์ค ๊ฒ์ ๋ง๋ค. ๊ทธ๋ฌ๋ WHERE์ ์์ dr์ ๋ถ๋ฌ์จ ๊ฒ์, ์ปฌ๋ผ ALIAS๋ฅผ ๋ถ๋ฌ์จ ๊ฒ์ด ์๋๋ผ, ์๋ธ์ฟผ๋ฆฌ ํ
์ด๋ธ์ ์ปฌ๋ผ ์์ฒด๋ฅผ ๋ถ๋ฌ์จ ๊ฒ์ด๋ฏ๋ก, ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ----------------------------------------------------------------------------------- ์ถ๊ฐ๋ก ์ฌ์ดํธ๋ฅผ ์ฝ๋ค ๋ ๊ถ๊ธํ ์ ์ด ์๊ฒจ์ ์ง๋ฌธ ๋๋ฆฝ๋๋ค! [์ง๋ฌธ: WHERE์ ์์ ALIAS๋ฅผ ๋ชป ์ฐ๋ ์ด์ ] WHERE์ ์์ ALIAS ๋ชป ์ฐ๋ ์ด์ ๋ MYSQL์์ WHERE์ ์ฒ๋ฆฌํ ์์ ์๋, SELECT์ ์์ ์ ํ ์ปฌ๋ผ ๊ฐ์ด ์์ง ๊ณ์ฐ์ด ์ ๋๊ธฐ ๋๋ฌธ์
๋๋ค. (The reason is that when MySQL evaluates the WHERE clause, the values of columns specified in the SELECT clause is not be evaluated yet.) ๊ทธ๋ ๋ค๋ฉด, ๋ง์ฐฌ๊ฐ์ง๋ก SELECT์ ์คํ ์ ์ ์ฒ๋ฆฌํ๋ GROUP BY๋ HAVING์์๋ ALIAS๋ฅผ ์ธ ์ ์์ด์ผํ๋๊ฑฐ ์๋๊ฐ..ํ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์ WHERE์ ์์๋ง ์๋๋์ง ๊ถ๊ธํฉ๋๋ค! *์ ๊ฐ ์ดํดํ ์ฟผ๋ฆฌ ์คํ ์์: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY --------------------------------------------------------------------------------------------- ๊ทธ๋ฆฌ๊ณ 3๋ฒ ์ง๋ฌธ ํด์ปค๋ญํฌ Top Earners์ SQL์ค๊ธ/๊ณ ๊ธ ๊ฐ์์์ ๋ ๋ค์์ ๋ค๋ฃจ๋ ๋ฌธ์ ๊ฐ์๋ฐ์! ๋ง์ํด์ฃผ์ ๋๋ก MAX ํ์ฉ ํ์ด์ ๊ดํ ์ง๋ฌธ์ ์ค๊ธ์ผ๋ก ์ฎ๊ฒผ์ต๋๋คใ
ใ
๊ฐ์ ๋ฌธ์ ๋ฅผ ์๋ธ์ฟผ๋ฆฌ ํ์ฉํด์ ํ์ด๋ณด๋ค(๊ณ ๊ธ> ์๋ธ์ฟผ๋ฆฌ ํด์ปค๋ญํฌ๋ฌธ์ ํ์ด 5:30๋ถํฐ) ๊ถ๊ธํ ์ ์ด ์๊ฒจ์ ์ฌ๊ธฐ์ ์ง๋ฌธ๋๋ฆฝ๋๋ค. HAVING ํ์ฉํด์ ํ์ด๋ดค์ ๋, COUNT(employee_id)๋ฅผ ํ๋ฉด ์๋ฌ๊ฐ ๋๋ ์ด์ ๊ฐ ๋ญ๊น์? -์ ๋ต SELECT salary * months AS earnings , COUNT(*) FROM employee GROUP BY earnings HAVING earnings = (SELECT MAX(salary*months) FROM employee) -์ค๋ต ERROR 1054 (42S22) at line 1: Unknown column 'months' in 'having clause' SELECT months * salary AS earnings , COUNT(employee_id) FROM Employee GROUP BY earnings HAVING months * salary = (SELECT MAX(months*salary) FROM Employee) ----------------------------------------------------------------------------- ๋ต๋ณ์ฃผ์ ๋๋ถ์ sql์ ์กฐ๊ธ์ฉ ๋ ์ดํดํ๊ณ ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋คใ
ใ
!!