본문 바로가기

DB관련

SQL 쿼리의 실행 순서

1.일반적인 쿼리의 실행순서

예제로 쿼리를 실행해 본다고 하자

SELECT          DISINTCT sample_data

FROM             sample_main_table a

INNER JOIN   sample_sub_table b

ON                  a.key_id = b.key_id

WHERE          sample_condition = 2

GROUP BY     sample_data

HAVING          SUM(sample_data) > 1

ORDER BY    sample_data

(LIMIT             5) 

  1. FROM 절이 먼저 실행이 된다.
  2. ON으로 조인 조건을 확인한다.
  3. JOIN 으로 테이블을 조인한다.
  4. WHERE 절을 검사하여 조건을 체크한다.
  5. GROUP BY 를 실행하여 조회 칼럼을 그룹화한다.
  6. HAVING 으로 그룹화 한 이후에 대한 데이터 조건을 체크한다.
  7. SELECT 로 칼럼들을 조회한다.
  8. DISTINCT 로 중복된 행을 삭제한다.
  9. ORDER BY 로 조회한 데이터를 정렬한다.
  10. 만약 LIMIT 를 사용 가능하다면 조회한 row를 LIMIT 만큼 제한해서 보여준다.

참고로 alias(별칭)은 FORM 절과 SELECT 절과 ORDER BY 절에서만 사용이 가능하다.

 

2. 서브쿼리에서의 쿼리 실행순서

SELECT          DISINTCT sample_data

FROM             sample_main_table a

INNER JOIN   sample_sub_table b

ON                  a.key_id = b.key_id

WHERE          sample_condition = (SELECT FROM sample_subquery_table WHERE 1=1)

  1. FROM 절이 먼저 실행이 된다.
  2. ON으로 조인 조건을 확인한다.
  3. JOIN 으로 테이블을 조인한다.
  4. WHERE 절을 검사하여 조건을 체크한다.
  5.  서브쿼리가 실행 되어서 1.일반적인 쿼리의 실행 순서대로 쿼리가 실행이 된다.
  6. GROUP BY 를 실행하여 조회 칼럼을 그룹화한다.
  7. HAVING 으로 그룹화 한 이후에 대한 데이터 조건을 체크한다.
  8. SELECT 로 칼럼들을 조회한다.
  9. DISTINCT 로 중복된 행을 삭제한다.
  10. ORDER BY 로 조회한 데이터를 정렬한다.
  11. 만약 LIMIT 를 사용 가능하다면 조회한 row를 LIMIT 만큼 제한해서 보여준다.

참고로 서브쿼리에서는 ORDER BY 를 사용하지 못한다.

 

3. 서브쿼리에 순서에 대해서 생각해볼 점

오라클에는 실행 계획이라는것이 있다. 이 실행계획에 따라 쿼리와 서브쿼리가 실행이 된다. 서브쿼리에도 인라인뷰, 스칼라 서브쿼리등 여러가지의 서브쿼리 종류가 있다. 서브쿼리의 종류에 따라, 또 메인테이블의 칼럼을 쓰고 있냐에 따라, 인덱스가 어떻게 짜여져 있냐에 따라, 옵티마이저가 어떻게 작동하냐에 따라 쿼리의 실행계획은 바뀔 수 있다. 오라클을 예로 들지만 다른 DB도 확인할 필요는 있지 않을까 싶다. 

 

 

참고

구루비-데이터베이스 질문과 답

http://www.gurubee.net/article/61228

[DB/Postgres] 서브쿼리(Subquery) /WITH절 이해하기 -1

https://adjh54.tistory.com/156#1.%20%EA%B5%AC%EC%A1%B0%20%EB%B0%8F%20%EC%88%98%ED%96%89%20%EC%88%9C%EC%84%9C-1

 

[DB/Postgres] 서브쿼리(Subquery) / WITH 절 이해하기 -1

해당 글에서는 서브쿼리와 WITH절에 대해서 이해하고 각각의 종류들에 대해서 상세하게 이해를 돕기 위한 목적으로 작성한 글입니다. 1) 서브 쿼리(Subquery)💡 서브쿼리(subquery) 란? - ‘하나의 SQL

adjh54.tistory.com

 

'DB관련' 카테고리의 다른 글

[DB] 테이블의 스캔방식  (0) 2023.11.21
maira db 설치하기  (0) 2023.11.14
데이터 베이스 옵티마이저란?  (0) 2023.10.29
데이터 모델링  (0) 2021.01.20
DB에 관하여  (0) 2021.01.20