[SQL] 논리적 처리 순서

힐링힐링·2025년 1월 21일
0

SQL

목록 보기
1/1

SQL 쿼리문을 작성하실때, SELECT, FROM, JOIN 등 하향식으로 작성하지만,
내부에서는 처리순서는 다음과 같습니다.

  1. FROM 그리고 JOIN

    • FROM절이 가장 먼저 처리됩니다
    • 조인이 있다면 테이블들을 먼저 조인합니다
    • 여기서 임시테이블 TempTable를 생성합니다
  2. WHERE

    • FROM/JOIN으로 생성된 임시 테이블에서 WHERE 조건에 맞는 데이터를 필터링합니다
    • 조건에 맞지 않는 행들은 제거됩니다
  3. GROUP BY

    • WHERE 필터링 후 남은 데이터를 지정된 컬럼 기준으로 그룹화합니다
    • 집계 함수(COUNT, SUM, AVG 등)가 각 그룹별로 계산됩니다
  4. HAVING

    • GROUP BY로 생성된 그룹들 중 HAVING 조건에 맞는 그룹만 필터링됩니다
    • WHERE가 개별 행을 필터링한다면, HAVING은 그룹을 필터링합니다
  5. SELECT

    • 실제 출력할 컬럼들을 선택합니다
    • 컬럼에 별칭(Alias, AS)이 적용됩니다
  6. DISTINCT

    • 중복된 행들을 제거합니다
  7. ORDER BY

    • 결과 데이터를 정렬
  8. 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개 행 반환

profile
블로그 이전합니다 https://james-kim-tech.tistory.com/

0개의 댓글

Powered by GraphCDN, the GraphQL CDN