SQL 쿼리문을 작성하실때, SELECT, FROM, JOIN 등 하향식으로 작성하지만,
내부에서는 처리순서는 다음과 같습니다.
FROM 그리고 JOIN
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT / OFFSET
예시:
-- 4. 연간 평가점수에 해당하는 평가 등급 및 성과금 TOP10 조회하기
SELECT E.EMP_NO, E.EMP_NAME,
(CASE
WHEN AVG(G.SCORE) >= 96 THEN 'S'
WHEN AVG(G.SCORE) >= 90 THEN 'A'
WHEN AVG(G.SCORE) >= 80 THEN 'B'
ELSE 'C'
END) AS GRADE,
(CASE
WHEN AVG(G.SCORE) >= 96 THEN E.SAL * 0.2
WHEN AVG(G.SCORE) >= 90 THEN E.SAL * 0.15
WHEN AVG(G.SCORE) >= 80 THEN E.SAL * 0.1
ELSE 0
END) AS BONUS
FROM HR_EMPLOYEES E
JOIN HR_GRADE G ON E.EMP_NO = G.EMP_NO
WHERE G.SCORE >= 70
GROUP BY E.EMP_NO, E.EMP_NAME
ORDER BY E.EMP_NO
LIMIT 10;
처리 순서:
1. FROM&JOIN
사원과 사원평가등급 테이블 조인
2. WHERE
평가 등급이 70점 이상으로 필터링
3. GROUP BY
사원별 그룹화
4. SELECT
사원번호, 성과, 보너스 컴럼 선택
5. ORDER BY
결과 데이터 사원번호 내림차순 정렬
6. LIMIT
상위 10개 행 반환