MySQL에서는 SELECT 절에서 정의한 별칭(alias)을 같은 쿼리 내에서 직접 참조할 수 없습니다. 이러한 제약을 우회하려면 사용자 정의 변수(user-defined variable)를 활용하는 것이 가장 간단한 방법입니다.
아래는 기본 문법입니다. 여기서 @yourAliasName은 값이 할당되는 변수이며, 동시에 별칭처럼 활용됩니다.
select @yourAliasName := curdate() as anyAliasName,
concat('yourValue.', yourColumnName, ' yourValue', @yourAliasName) as anyAliasName
from yourTableName;
:= 연산자는 변수에 값을 할당하는 역할을 하며, 할당된 값은 이후 같은 SELECT 문 안에서 @yourAliasName 형태로 자유롭게 재사용할 수 있습니다.
예제 테이블 생성
먼저 실습용 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(40)
);
Query OK, 0 rows affected (0.62 sec)
데이터 삽입
insert 명령으로 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John Smith');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David Miller');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('John Doe');
Query OK, 1 row affected (0.18 sec)전체 레코드 조회
select 문으로 저장된 모든 데이터를 확인합니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+
| Name |
+--------------+
| John Smith |
| Chris Brown |
| David Miller |
| John Doe |
+--------------+
4 rows in set (0.00 sec)
동일한 쿼리 내에서 별칭 값 사용하기
이제 사용자 정의 변수를 이용해, 하나의 SQL 문 안에서 별칭 값을 그대로 재사용하는 쿼리를 살펴보겠습니다.
mysql> select @todayDate := curdate() as todayDate,
concat('Mr.', Name, ' The current Date is=', @todayDate) as Result
from DemoTable;
실행 결과는 다음과 같습니다.
+------------+------------------------------------------------+
| todayDate | Result |
+------------+------------------------------------------------+
| 2019-09-08 | Mr.John Smith The current Date is=2019-09-08 |
| 2019-09-08 | Mr.Chris Brown The current Date is=2019-09-08 |
| 2019-09-08 | Mr.David Miller The current Date is=2019-09-08 |
| 2019-09-08 | Mr.John Doe The current Date is=2019-09-08 |
+------------+------------------------------------------------+
4 rows in set (0.00 sec)
출력 결과를 보면, curdate()로 할당한 @todayDate 변수가 오른쪽 concat() 함수 안에서 그대로 참조되어 각 행마다 동일한 날짜 값이 출력되는 것을 확인할 수 있습니다.
참고: 대안 방법
사용자 정의 변수 외에도 하위 쿼리(subquery)나 MySQL 8.0 이상에서 지원되는 CTE(WITH 절)를 사용하면 별칭 값을 재사용할 수 있습니다. 다만 단순히 한 번 계산한 값을 같은 SELECT 문에서 반복해서 쓰는 경우라면, 위 예제처럼 사용자 정의 변수를 활용하는 방식이 코드도 짧고 직관적입니다.