쿼리 실행 순서

1
2
3
4
5
6
7
8
SELECT DISTINCT column, AGG_FUNC(_column_or_expression_),  
	FROM mytable 
		JOIN another_table ON mytable.column = another_table.column 
	WHERE _constraint_expression_ 
	GROUP BY column 
	HAVING _constraint_expression_ 
	ORDER BY _column_ ASC/DESC 
	LIMIT _count_ OFFSET _COUNT_;

1. FROM and JOIN

  • 전체 데이터 집합을 찾기 위해 FROM과 JOIN절이 먼저 실행됨
  • 서브쿼리가 있다면 JOIN될 데이터 테이블을 만들기 위해 임시 테이블을 생성할 수 있음

2. WHERE

  • 1에서 얻은 전체 데이터 집합의 각각의 row에 WHERE에 정의된 제약조건이 적용되고, 제약조건을 만족하지 않는 row는 버려짐
  • FROM절에서 요청된 테이블의 열에만 접근 가능
  • SELECT절의 Alias로 된 컬럼은 사용불가
    • 아직 실행되지 않은 부분에 의해 값이 바뀔 수 있으므로 당장 처리하지 않음

3. GROUP BY

  • 2에서 제약조건을 충족한 row들을 GROUB BY에 지정된 컬럼의 공통값으로 그룹화됨
  • 지정된 컬럼의 고유한 개수만큼 row가 생성됨

4. HAVING

  • 3에서 그룹화된 테이블은 2와 마찬가지로 제약조건을 적용하여 제약조건을 만족하지 않는 row는 버려짐
  • 2와 마찬가지로 Alias로된 컬럼은 사용 불가

5. SELECT

  • SELECT부분의 모든 표현식이 최종적으로 계산됨

6. DISTINCT

  • 5에서나온 데이터에서 DISTINCT로 표시된 컬럼의 중복값이 제거됨

7. ORDER BY

  • 지정된 데이터를 따라 오름차순 또는 내림차순으로 정렬됨
  • 쿼리의 SELECT절이 수행되었으므로 SELECT의 Alias로 정렬 가능

8. LIMIT, OFFSET

  • LIMIT 및 OFFSET으로 지정된 범위를 벗어나는 행은 삭제되고 최종 결과값만 남음

https://sqlbolt.com/lesson/select_queries_order_of_execution

#Database
#Query

Licensed under CC BY-NC-SA 4.0
마지막 수정: Apr 21, 2024 09:36 UTC
Hugo로 만듦
JimmyStack 테마 사용 중