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으로 짜야 한다.
이 실행 순서를 기억해야 실행 계획을 파악할 때 유용하게 사용된다.
'Language > SQL' 카테고리의 다른 글
[SQL] MAX(), MIN() 함수 정리 (0) | 2022.08.31 |
---|---|
[SQL] SQL REGEXP_SUBSTR LEVEL CONNECT BY 정리 (0) | 2022.08.11 |
[SQL] SQL IN EXISTS 속도 차이 (2) | 2022.08.11 |
[SQL] SQL 인덱스란? (3) | 2022.07.12 |
[SQL] SQL 옵티마이저란? (0) | 2022.07.10 |
[SQL] SQL 튜닝 유형 - 인덱스(Index) (0) | 2022.07.08 |
[SQL] SQL 쿼리를 짤 때 주의해야 하는 것들 (0) | 2022.07.07 |
[SQL] SQL 실행계획이란? (0) | 2022.07.07 |
최근댓글