본문 바로가기
DEV/DB & SQL

[SQL] WHERE 절에서는 별칭(alias)을 사용할 수 없음 / 대안 방법

by 무사뎀벨레 2024. 5. 7.

 

 

 

 

 

 

 

 

WHERE절에서 alias(열 별칭)을 사용하지 못하는 경우


SELECT에서 쓴 alias(열 별칭) 를 WHERE절에 쓰지 못하는 이유는 다음과 같다.

대부분의 SQL 데이터베이스에서 SELECT 절FROM 절 뒤WHERE 절 앞에서 처리되기 때문에, SELECT 절에 정의된 alias(열 별칭)은 WHERE 절이 처리될 때 아직 사용할 수 없다.

 

아래의 SQL 엔진 프로세스를 확인하면 더욱 이해가 잘될 것이다.

 

SQL 엔진의 프로세스

FROM -> JOIN ->  WHERE ->  GROUP BY ->  HAVING ->  SELECT ->  ORDER BY ->  LIMIT

 

1. FROM : 데이터를 가져올 테이블을 지정

2. WHERE : 가져올 행(row)을 필터링

3. GROUP BY : 행을 그룹화

4. HAVING : 그룹에 대한 조건을 지정

5. SELECT : 열을 선택

6. ORDER BY : 결과를 정렬

7. LIMIT : 결과 행의 수를 제한

 

위 순서에 따라 WHERE 절은 SELECT 절보다 먼저 실행되므로, WHERE 절에서 사용하는 별칭은 아직 정의되지 않은 상태이다. 그렇기 때문에, WHERE 절에서 별칭을 사용할 수 없다.

 

CREATE TABLE ALIAS_TEST (
    NUM    INT    IDENTITY(1,1)
  , NAME   CHAR(6)
 )
 
 INSERT INTO ALIAS_TEST VALUES ('SON')
 INSERT INTO ALIAS_TEST VALUES ('MADDISON')
 INSERT INTO ALIAS_TEST VALUES ('ROMERO')
 
 -- 별칭을 사용 오류 발생
 SELECT NUM, NAME AS N FROM ALIAS_TEST 
 WHERE N = 'SON'

 

 

 

 

 

 

대안 방법


그렇지만, HAVING 절은 실제로 SELECT 절과 GROUP BY 절 이후에 사용되며, 그룹화된 결과에 대한 조건을 지정하는 데 사용할 수 있다. 따라서, HAVING 절에서는 alias(열 별칭)를 사용할수있다.

 

또한, ORDER BY 절에서는 alias(열 별칭)뿐 아니라 컬럼의 순서에 해당하는 숫자도 사용할 수 있다.

 

CREATE TABLE ALIAS_TEST (
    NUM    INT    IDENTITY(1,1)
  , NAME   CHAR(6)
 )
 
 INSERT INTO ALIAS_TEST VALUES ('SON')
 INSERT INTO ALIAS_TEST VALUES ('MADDISON')
 INSERT INTO ALIAS_TEST VALUES ('ROMERO')
 
 -- 검색 가능
 SELECT NUM, NAME AS N FROM ALIAS_TEST
 WHERE NAME = 'SON'
 
 -- ORDER BY 절에서는 별칭 사용 가능
 SELECT NUM, NAME AS N FROM ALIAS_TEST
 ORDER BY N
 
 -- ORDER BY 절은 컬럼의 순서에 해당하는 숫자도 사용 가능
 SELECT NUM, NAME AS N FROM ALIAS_TEST
 ORDER BY 2
반응형

'DEV > DB & SQL' 카테고리의 다른 글

[SQL] Group By, Having, Order By  (2) 2024.11.28
[SQL] DDL, DML, DCL,TCL  (0) 2024.04.23
[MSSQL] 날짜 형식 포맷 (CONVERT, GETDATE)  (0) 2024.04.16
[MSSQL] VIEW 테이블의 정의와 사용 방법  (0) 2024.03.28
[MyBatis] MyBatis란?  (2) 2024.03.14

댓글