SQL문제를 풀다가 알게되었는데 별칭이 있는 컬럼은 WHERE절에서 사용하지 못 한다.
찾아보니 사용하지 못 하는 이유는 SQL의 실행순서때문이라고 한다.
SQL의 실행순서는 아래와 같다.
FROM / JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT
보다시피 SELECT절보다 WHERE절이 먼저 실행이 된다.
그렇기 때문에 WHERE절에서 별칭이 붙은 컬럼을 이용하면 오류가 발생하는 것!
SELECT 이전에는 별칭을 사용할 수 없지만, 그 후부터는 별칭이 사용이 가능하다.
그런데 내가 풀은 문제에서는 HAVING에서 별칭을 이용했다. HAVING 역시 SELECT 전에 수행이 되는데 어떻게 이건 오류가 안 날까?에 대한 의문이 있었다. 그래서 이것도 역시 찾아보았다.
그 결과 DBMS종류에 따라서는 SELECT의 컬럼 및 ALIAS절로 데이터 추출이 마지막에 수행되더라도 ALIAS절을 미리 인식해서 HAVING절에서 ALIAS를 사용할 수 있게 허용하는 DB도 있다는 것을 알게 되었다. 예를 들어 MYSQL과 같은...
그래서 궁금증이 깔끔하게 해결이 되었다!
여기서 별칭을 잠깐 짚어보고 넘어가보자면,
별칭(ALIAS)은 긴 테이블명이나 컬럼명을 짧게 만들어 SQL 작성에 효율성을 높여주는 것이다.
예약어로 AS를 이용하고 생략도 가능하다.
표기방법
- 테이블 열
select column_name AS alias_name
FROM table_name;
-- AS 생략
select column_name alias_name
FROM table_name;
- 테이블
select column_name
FROM table_name AS alias_name;
-- AS 생략
select column_name
FROM table_name alias_name;