MySQL에서 쿼리의 결과값을 사용자 변수(user variable)에 저장하려면, 해당 변수를 할당문 안으로 옮겨주어야 합니다. 즉, SET 문과 함께 서브쿼리(subquery)를 활용하면 쿼리 결과를 변수에 직접 담을 수 있습니다.
개념을 이해하기 위해 먼저 예제 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table UserVariable
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.53 sec)
1. 샘플 데이터 삽입
INSERT 명령어를 사용하여 테이블에 레코드를 몇 개 삽입합니다. 쿼리는 다음과 같습니다.
mysql> insert into UserVariable values(101,'John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into UserVariable values(200,'Tom');
Query OK, 1 row affected (0.18 sec)
mysql> insert into UserVariable values(500,'Carol');
Query OK, 1 row affected (0.13 sec)
2. 전체 레코드 조회
SELECT 명령어를 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from UserVariable;
출력 결과
+------+-------+
| Id | Name |
+------+-------+
| 101 | John |
| 200 | Tom |
| 500 | Carol |
+------+-------+
3 rows in set (0.00 sec)
3. 쿼리 결과를 사용자 변수에 할당
이제 사용자 변수를 활용하여 최대 Id 값을 가진 레코드를 조회하는 쿼리를 작성해 보겠습니다. 먼저 변수를 선언하고, 위 테이블에서 최대 Id 값을 SELECT하여 초기화합니다.
mysql> set @Maxid=(select MAX(Id) from UserVariable);
Query OK, 0 rows affected (0.00 sec)
다음으로, 해당 최대 Id와 일치하는 이름(Name)만 담는 또 다른 변수를 생성합니다.
mysql> set @Name=(select Name from UserVariable where Id=@Maxid);
Query OK, 0 rows affected (0.00 sec)
4. 변수 값 확인
이제 @Name 변수에 어떤 값이 들어 있는지 확인할 수 있습니다.
mysql> select @Name;
아래 출력 결과에서 가장 큰 Id(500)에 해당하는 이름이 변수에 저장된 것을 확인할 수 있습니다.
+-------+
| @Name |
+-------+
| Carol |
+-------+
1 row in set (0.00 sec)
이처럼 MySQL에서는 SET @변수명 = (서브쿼리) 형태를 사용하여 쿼리의 실행 결과를 손쉽게 사용자 변수에 저장할 수 있습니다. 이후 이 변수는 다른 쿼리문에서 조건 비교나 값 참조 등 다양한 용도로 재활용할 수 있습니다.