MySQL에서 SELECT CASE 문의 실행 결과를 사용자 정의 변수(@변수)에 저장하고 싶다면, 쿼리 마지막에 INTO @변수명 구문을 추가하면 됩니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 두 개의 정수 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Num1 int,
-> Num2 int
-> );
Query OK, 0 rows affected (0.65 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values(10,30); Query OK, 1 row affected (0.11 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+------+------+ | Num1 | Num2 | +------+------+ | 10 | 30 | +------+------+ 1 row in set (0.00 sec)
4. SELECT CASE 결과를 변수에 저장하기
다음은 CASE 문의 평가 결과를 변수 @s에 저장하는 쿼리입니다. 조건에 따라 "Equal"(같음), "Greater"(큼), "Lower"(작음) 중 하나의 문자열이 반환됩니다.
mysql> select case
-> WHEN Num1=Num2 THEN "Equal"
-> WHEN Num1 > Num2 THEN "Greater"
-> WHEN Num1 < Num2 THEN "Lower" end
-> from DemoTable
-> into @s;
Query OK, 1 row affected (0.01 sec)
여기서 핵심은 쿼리 끝에 붙은 into @s; 부분입니다. 이렇게 하면 CASE 표현식의 결과가 별도의 출력 없이 곧바로 변수에 할당됩니다.
5. 변수 값 확인하기
저장된 변수의 값을 조회해 보겠습니다.
mysql> select @s;
출력 결과
+-------+ | @s | +-------+ | Lower | +-------+ 1 row in set (0.00 sec)
결과 분석
테이블에는 Num1 = 10, Num2 = 30인 레코드가 저장되어 있습니다. CASE 조건을 순서대로 평가하면 다음과 같습니다.
- Num1 = Num2? → 10 = 30은 거짓
- Num1 > Num2? → 10 > 30은 거짓
- Num1 < Num2? → 10 < 30은 참 → "Lower" 반환
따라서 변수 @s에는 "Lower"가 저장된 것을 확인할 수 있습니다.
정리
MySQL에서는 SELECT ... INTO @변수명 구문을 활용하면 CASE 문뿐만 아니라 어떤 SELECT 표현식의 결과든 손쉽게 세션 변수에 저장할 수 있습니다. 저장된 변수는 이후 같은 세션 내에서 다른 쿼리나 절차형 로직(예: 저장 프로시저)에서 재사용할 수 있어 매우 유용합니다.