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 |
댓글