Programming/Database

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리

Jan92 2024. 5. 9. 23:00

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리

select 쿼리 실행 순서 및 처리 과정

'SELECT Query'는 데이터베이스에 저장된 데이터를 조회하는 쿼리로, SQL에서 가장 많이 사용되는 기본적이면서도 핵심적인 기능입니다.

SELECT 쿼리는 일반적으로 작성하는 순서와 실행되는 순서가 다르다는 특징이 있는데요.

쿼리가 실행되는 순서를 이해하는 것은 쿼리를 효율적으로 작성하고 또 최적화하는 데 중요한 역할을 한다고 생각합니다.

 

해당 포스팅에서는 'SELECT 쿼리의 실행 순서 및 처리 과정'을 정리하였습니다.

 


SELECT 쿼리 실행 순서 및 처리 과정

SELECT [DISTINCT] 필드명
FROM 테이블명
WHERE 조건
GROUP BY 컬럼명
HAVING 조건
ORDER BY 컬럼명 [ASC || DESC]

(SELECT 쿼리 기본 구조)

 

 

'FROM(AND JOIN)' -> 'WHERE' -> 'GROUP BY' -> 'HAVING' -> 'SELECT' -> 'ORDER BY'

 

앞서 이야기한 것처럼 SELECT 쿼리는 작성되는 순서와 실행되는 순서가 다른데요.

아래 내용을 통해 각 단계별로 어떤 과정을 처리하게 되는지 자세하게 살펴보겠습니다.

 

***

특히 JOIN, WHERE, GROUP BY, HAVING 단계에서는 쿼리를 어떻게 작성하느냐에 따라 성능적 차이가 발생할 수 있기 때문에 실행 순서를 잘 파악해 둘 필요가 있습니다.

 

 

 

1. FROM(AND JOIN)

쿼리의 첫 번째 순서는 'FROM' 절입니다.

FROM 절에서는 조회할 대상 테이블을 지정하고 (INDEX를 사용하지 않는다는 가정 하에) 해당 테이블의 모든 행(row)을 가져옵니다.

이후 JOIN을 실행하여 조회 대상 데이터를 하나의 가상 테이블로 결합합니다.

 

 

2. WHERE

두 번째로 동작하는 'WHERE' 절에서는 FROM 절에서 가져온 테이블의 데이터를 필터링하는 역할을 수행하는데요.

WHERE 절에서는 조건을 정의하고, 각 행(row)이 정의된 조건을 만족하는지를 평가하여 참(TRUE) 또는 거짓(FALSE)을 결정합니다.

그리고 정의된 조건을 만족(결과가 TRUE 인)하는 행만 결과 집합에 포함하여 반환합니다.

 

 

3. GROUP BY

'GROUP BY' 절에서는 지정한 컬럼(또는 컬럼 목록)을 기준으로 앞서 반환된 데이터 결과를 그룹핑합니다.

필요한 경우 그룹화된 결과에 대해 그룹 함수(COUNT, SUM, AVG, MIN, MAX 등)를 적용하여 그룹별 집계를 수행할 수 있습니다.

 

 

4. HAVING

'HAVING' 절은 그룹별로 집계된 결과에 대한 필터링에 사용됩니다.

WHERE 절이 각 행(row) 단위로 조건을 비교하는 반면, HAVING 절은 그룹핑된 그룹 단위로 조건을 비교합니다.

만약 HAVING 절에 사용하는 조건을 WHERE 절에 사용해도 무방하다면 WHERE 절에 사용하는 것이 좋은데요.

이유는 WHERE 절을 통해 필터링된 행만을 그룹화하여 집계를 수행하기 때문에 처리할 데이터 양이 줄어들어 성능이 향상될 수 있기 때문입니다.

 

 

5. SELECT

'SELECT' 절에서는 앞선 과정들을 통해 처리된 데이터에서 어떤 컬럼(또는 컬럼 목록)을 출력할지 선택하는 부분입니다.

 

 

6. ORDER BY

마지막 'ORDER BY' 절에서는 지정한 컬럼(또는 컬럼 목록)을 기준으로 결과 데이터를 정렬합니다.

기본적으로 오름차순(ASC)으로 정렬되며, 지정 시 내림차순(DESC)으로도 정렬할 수 있습니다.

 

 

+ 추가로 DISTINCT

'DISTINCT' 절은 SELECT와 ORDER BY 사이에 적용되며, 중복된 행을 제거하는 데 사용됩니다.

'SELECT DISTINCT'와 같은 형식으로 사용되며, 중복된 값을 가지는 행을 하나의 행으로 압축합니다.

 

 

 

 

< 참고 자료 >

https://myjamong.tistory.com/172