SQL 쿼리 실행 과정 (6 STEP)

1 minute read

이번 포스팅에서는 SQL 쿼리의 실행과정에 대해 알아보려 한다. SQL 쿼리의 실행과정을 이해한다면, 쿼리문을 조금 더 수월하게 작성할 수 있다.

쿼리 프로세스

SQL의 쿼리문 실행 프로세스는 크게 6 단계로 구분할 수 있다.

1. 데이터 가져오기 (From, Join)
2. 조건문 행 필터링 (Where)
3. 그룹핑 (Group by)
4. 그룹핑 결과 필터링 (Having)
5. 결과 리턴 (Select)
6. 결과 정렬 (Order by & Limit / Offset)

기본적인 흐름을 눈대중으로 파악했다면, 예제를 통해 실제로 어떻게 동작되는지 확인해보자. 예제 테이블은 아래와 같다.


쿼리프로세스-table

Empyolee 테이블에는 직원의 과 직무의 ID 번호가 하나의 행으로 데이터가 저장되어있다. 그리고 JOB 테이블에는 직무의 ID 번호와 이에 해당하는 직무 이름으로 데이터가 구성되어있다.

이제, 두 테이블에서

1) 직무가 Front-End 이거나 Back-End 이면서,

2) 같은 직무 동료가 두 명 이상인 데이터를

3) 직무 이름 기준으로 오름차순 정렬하는 쿼리문을 실행해보자.

SELECT job.jobName
FROM Emplyoee
JOIN job
ON Emplyoee.jobid= job.jobid 
WHERE job.jobName != 'AI'
GROUP BY job.jobName 
HAVING COUNT(*) >= 2
ORDER BY job.jobName ASC

1. 데이터 가져오기 (From, Join)

FROM Emplyoee
JOIN job

쿼리문이 실행되면 우선 베이스 데이터를 가져온다. 우선, From 절을 실행하고, Join 절을 실행한다. 위 쿼리의 연산결과는 데카르트 곱 형태로 나타나게 된다.

image

이후에 ON 조건문이 실행되어 데카르트 곱 결과로부터 Emplyoee.jobid= job.jobid 조건문이 필터링 된 결과값이 나오게된다.

image

2. 조건문 필터링 (Where)

WHERE job.jobName != 'AI'

그 다음으로 WHERE 조건문이 실행된다. 해당 조건에 알맞지 않은 데이터는 필터링으로 걸러진다.

image

3. 그룹핑 (Group by)

GROUP BY job.jobName 

조건문으로 필터링 과정이 이루어졌으면, 이젠 그룹핑 작업이 진행된다.

image

4. 그룹핑 필터링 (Having)

HAVING COUNT(*) >= 2

GROUP BY 결과 이후 Having 절이 실행된다. Having 절은 이제 개별적인 행에 접근할 수 없으며, Group 단위로만 조건이 적용된다.


5. 결과 return (Select)

SELECT job.jobName

이제 ON, WHERE 조건문으로 필터링되고, GROUP BY 절로 그룹핑 된 후 HAVING 절에 의해 그룹핑된 결과도 필터링된 결과값이 도출된다.

image

6. 결과 정렬 (Order by & Limit)

ORDER BY job.jobName ASC

모든 SQL 쿼리문이 실행된 이후에 가장 마지막으로 데이터의 최종 정렬이 이루어진다. 이 과정에서 ORDER BY , LIMIT 절이 실행된다. 최종 결과값은 다음과 같다.

image


Reference

Leave a comment