본문 바로가기
DB

SELECT query가 실행되는 과정

by kkkdh 2023. 2. 21.
728x90

들어가면서..

오늘은 database에서 데이터를 조회하기 위한 기본적인 방법인 SELECT query에서 데이터를 조회하는 과정을 단계별로 살펴보려고 합니다.

 

SELECT query에 포함되는 where, group by, having, order by 절과 같은 구문들을 실행하는 순서가 정해져 있고, 이에 따라서 성능이 좌우되는 경우도 많기 때문에, 매우 중요한 개념입니다.


SELECT query 기본 구성 요소

우선 select query에 포함되는 모든 clause를 표현하면, 다음과 같이 정리됩니다.

SELECT <attrubute and function list>
FROM <table list>
WHERE <condition>
GROUP BY <grouping attrubutes>
HAVING <group condition>
ORDER BY <attrubute list>;

총 6단계(select, from, where, group by, having, order by)로 구성된 과정을 거쳐서 select query의 결과가 반환되며, 각 단계의 실행 순서는 다음과 같습니다.

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

이렇게 어떤 절이 먼저 실행되는지만 놓고 봐서는 각 단계별로 어떤 과정을 수행하는지 정리해 보겠습니다.


Clause 별로 작업하는 내용

FROM 절

먼저 from 절에서는 전체 테이블의 데이터를 모두 가져옵니다.

 

물론 가져온 데이터가 where 절이나 select 절에서 걸러질 수 있지만, 일단 모든 데이터를 조회하는 방식으로 동작합니다.

 

WHERE 절

FROM 절에서 조회한 데이터를 일차적으로 condition에 맞게 거르는 작업을 수행합니다.

 

예를 들어 Member table에서 "where member.id < 10" 같은 where 절을 통한 조회 과정이 진행된다면, id가 10보다 작은 데이터를 거르는 작업을 where 절에서 수행한다고 볼 수 있습니다.

 

GROUP BY 절

group by 절에서는 특정 속성(들)을 기준으로 데이터를 그룹화 합니다. 

 

예를 들어 Member table에 job이라는 column이 있고, group by job이라고 query문을 작성했다면, 직업별로 데이터를 그룹화하는 작업을 group by 절에서 진행합니다.

 

물론 한 개의 column이 아닌 여러 개의 column으로도 grouping이 가능합니다.

 

HAVING 절

having 절은 group by 절에서 grouping 한 데이터들에 대해 having 절에 작성한 조건을 기준으로 한 번 더 거르는 작업을 수행합니다.

 

이때, having 절에서는 그룹 함수를 사용할 수 있고, 그룹 함수는 그룹에 대한 통계성 정보를 제공하는 작업을 수행할 때 사용할 수 있습니다.

 

SELECT 절

다음으로 SELECT 절에서는 조건을 처리하고 남은 데이터의 어떤 column을 출력할지 선택하는 절차를 진행합니다.

 

MySQL 기준으로는 *이 작성되었다면, 모든 column을 반환할 것이고, 일부 column만을 명시해 원하는 column만 조회하도록 구현할 수 있겠습니다.

 

ORDER BY 절

order by는 항상 가장 마지막에 실행되는 절로 출력되는 데이터들을 특정 정렬 기준에 따라 정렬하는 작업을 수행합니다.

 

이 때, order by 절은 가장 마지막에 실행되는 절이기 때문에, select 절에서 alias를 사용한다 하더라도 별칭(alias)을 이용한 정렬까지 가능합니다. 

 

비슷한 개념을 적용해서 생각해 보면, where 절이나 다른 select 절 이전에 실행되는 clause에서는 alias를 사용하면 에러가 발생하는 이유를 파악할 수 있습니다.

 

추가적으로 정렬 옵션으로는 asc, desc가 있는데, 순서대로 오름차순, 내림차순을 의미합니다.

728x90

댓글