반응형

1. SELECT 쿼리문 실행순서

1) FROM

2) WHERE

3) GROUP BY

4) HAVING

5) SELECT

6) ORDER BY

 

SELECT 쿼리를 실행하면, 위의 순서로 쿼리문이 실행이 된다. 이 실행순서는 쿼리를 짤 때 굉장히 중요한 실행순서가 된다. 결국 이 실행순서도 쿼리의 실행계획에도 연관이 있다.

 

먼저, FROM 절을 통해 데이터를 가져온다. 여기서, WHERE 절을 실행하여 데이터 조회의 조건에 따라 데이터 수를 줄인다. 그리고 GROUP BY를 통해 컬럼들을 묶어주는데, 여기서 GROUP BY의 조건문인 HAVING이 있다. 근데, HAVING을 사용하는 것보다 WHERE 절을 활용하는 것이 성능면으로 더 좋다. 전체 데이터에서 조건을 통해 데이터를 줄인 데이터의 결과를 가지고 어떤 컬럼을 가져올건지 SELECT를 통해 설정하고, 설정된 데이터를 가지고 정렬을 한다. 이게 SELECT 쿼리문의 실행 순서이다.

 

쿼리문을 짜다 보면, ALIAS를 정말 많이 사용한다. 그래서, 이 경우에 우이ㅢ 실행 순서도 고려하여 쿼리문을 작성해야 한다. 예를 들어, 아래의 쿼리를 보자.

 

SELECT 'TEST01' AS NAME
     , 'TEST'   AS CODE
  FROM DUAL
 WHERE NAME = 'TEST01'

 

위의 쿼리를 실행하면 결과가 나올까?

정답은 결과가 나오지 않는다.

 

아래와 같이, 알 수 없는 식별자라고 나온다.

[14:52:24.521]JDBC-8026:Invalid identifier.   
at line 4, column 9 of null:
 WHERE NAME = 'TEST01'
       ^

 

이 경우에도 SELECT 문은 WHERE 조건 보다 더 나중에 실행이 된다. ALIAS가 적용되야 하는 저 NAME이라는 컬럼은 WHERE 조건이 실행될 때 NAME으로 설정이 되어 있지 않아 알 수 없는 식별자가 된다.

 

그래서, WHERE 조건에서의 컬럼은 실질적으로 테이블에서 정의한 COLUMN_NAME으로 짜야 한다.

 

이 실행 순서를 기억해야 실행 계획을 파악할 때 유용하게 사용된다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기