개발이야기/MySQL

[MySQL] SELECT alias(별칭) 조건문에서 사용하기, 예제 (having)

후린개발자 2023. 6. 30.
반응형

SELECT 구문에서 사용한 별칭(alias)을 WHERE 조건문에 사용 시 별칭(alias)의 칼럼을 알 수 없다는 오류가 발생합니다.
그 이유는 SQL 질의의 논리적 실행 순서 때문입니다.

SQL 문의 논리적 실행 순서는 다음과 같습니다:

1. FROM: 데이터를 가져올 테이블을 지정합니다.
2. WHERE: 가져올 행(row)을 필터링합니다.
3. GROUP BY: 행을 그룹화합니다.
4. HAVING: 그룹에 대한 조건을 지정합니다.
5. SELECT: 열을 선택합니다.
6. ORDER BY: 결과를 정렬합니다.
7. LIMIT: 결과 행의 수를 제한합니다.

위 순서에 따라 WHERE 절은 SELECT 절보다 먼저 실행되므로, WHERE 절에서 사용하는 별칭은 아직 정의되지 않은 상태입니다. 따라서 WHERE 절에서 별칭을 사용할 수 없습니다. HAVING 절은 실제로 SELECT 절 이후에 실행되며 HAVING 절은 GROUP BY 절 이후에 사용되며, 그룹화된 결과에 대한 조건을 지정하는 데 사용됩니다. 따라서 HAVING 절에서 별칭을 사용할 수 있습니다.

 

아래는 테스트 테이블과 예제 쿼리입니다.

 

예제

test_user 테이블

 

test_info 테이블

 

잘못된 쿼리

select *, 
(select city from test_info where id=a.id) as city
from test_user a
where city is not null

[Err] 1054 - Unknown column 'city' in 'where clause'

 

 

HAVING 사용하기

select *, 
(select city from test_info where id=a.id) as city
from test_user a
HAVING city is not null

 

alias 조건문에서 사용하기

 

반응형

댓글

💲 추천 글