IT/DBMS

[SQL] Oracle SELECT query 실행 순서

알 수 없는 사용자 2022. 11. 28. 07:09
반응형

목차

    image source:https://unsplash.com/s/photos/sql

    SQL SELECT 쿼리 실행 순서😀

    SELECT 쿼리에서 실행 순서는 아래와 같다.

    부끄럽지만 처음엔 저런 순서가 있는 지 몰랐고 최근에 알았다.

    아무것도 모르는 초보 시절엔 그냥 썼다고 치면 시간이 흐르면서는 점점 이해하면서 쓰려고 한다.

    저 순서를 반드시 기억하고 쿼리를 작성해야 하며 이에 따른 퍼포먼스의 차이가 크다.

     

    예시 SELECT SQL😄

    SELECT
        JOB_ID
        ,AVG(SALARY) SAL_AVG
    FROM
        EMPLOYEES2 e 
    WHERE 
        SALARY > 13000
    GROUP BY 
        JOB_ID
    HAVING
        COUNT(*) > 1
    ORDER BY SAL_AVG DESC
    ;

    위 간단한 쿼리문에서도 내부적으로는 6단계를 거친다.

     

    저 실행 순서를 하나씩 뜯어 보겠다.😎

    FROM절

    쿼리의 첫번 째 실행순서인 FROM절에서 아래처럼 EMPLOYEES2 테이블의 전체 데이터를 가지고 온다.

    -- EMPLOYEES2테이블의 전체 데이터 조회
    FROM EMPLOYEES2

    FROM절

     

    WHERE절

    WHERE절에서는 전체 데이터에서 아래처럼 조건에 맞는 결과를 필터링한다.

    -- 급여가 13000 이상인 데이터 필터링
    WHERE SALARY > 13000

    WHERE절

     

    GROUP BY절

    GROUP BY절에서는 WHERE절로 필터링된 데이터를 그룹핑하는 작업을 한다.

    (GROUP BY한 컬럼으로 중복제거 후 그룹화함)

    GROUP BY절 사용 시 그룹함수를 사용할 수 있음(count(), sum(), avg() 등)

    -- JOB_ID를 기준으로 그룹핑
    GROUP BY JOB_ID

    GROUP BY절

     

    HAVING절

    HAVING절은 GROUP BY한 데이터에 조건을 줄 때 사용됨

    HAVING절에서는 집계함수를 조건으로 사용가능

    WHERE절과는 다른용도로 사용됨(WHERE절은 FROM절 다음에 나온 데이터 필터링, 즉 GROUP BY 전에 필터링)

    -- GROUP BY한 데이터가 1개 이상인 것만 조회
    HAVING COUNT(*) > 1

    HAVING절

     

    SELECT절

    여러 조건들 필터링한 최종 데이터에서 출력할 데이터를 선택하는 절이 SELECT절이다.

    -- 조건 처리 후 출력할 데이터 선택
    SELECT JOB_ID, AVG(SALARY) SAL_AVG

    SELECT절

     

    ORDER BY 절🤩

    마지막 어떤 데이터를 출력할지 정한 뒤 선택사항으로 row의 순서를 정렬해주는 절이 ORDER BY 절이다.

    -- 평균값을 SAL_AVG로 별칭을 주고 그로 내림차순 정렬
    ORDER BY SAL_AVG DESC

    ORDER BY절

     

    참조 : 마이자봉 블로그, 2020.03.17, https://myjamong.tistory.com/172

     

    [Oracle] SQL SELECT 쿼리 실행 순서 처리 과정 :: 마이자몽

    SELECT 쿼리 실행 순서 SQL 쿼리문을 작성할때 사용되는 WHERE, GROUP BY, ORDER BY 절과 같은 구문을 실행하는데 순서가 존재합니다. 이 순서에 의해서 쿼리가 처리되고 어떻게 쿼리문을 작성하느냐에 따

    myjamong.tistory.com

    반응형