MySQL에서 쿼리를 실행하면서 그 결과를 화면에 출력하지 않아야 하는 경우가 있습니다. 예를 들어 계산 결과만 변수에 저장해 두고 나중에 활용하고 싶을 때 유용합니다. 이때 사용자 정의 변수(User-defined Variable)를 활용하면 간단하게 해결할 수 있습니다.
1. 테스트용 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable709 (Amount int); Query OK, 0 rows affected (0.62 sec)
2. 데이터 삽입
INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable709 values(100); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable709 values(560); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable709 values(7800); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable709 values(1020); Query OK, 1 row affected (0.15 sec)
3. 저장된 데이터 확인
SELECT문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable709;
실행 결과는 다음과 같습니다.
+--------+ | Amount | +--------+ | 100 | | 560 | | 7800 | | 1020 | +--------+ 4 rows in set (0.00 sec)
4. 결과를 출력하지 않고 쿼리 실행하기
핵심은 SELECT 결과를 직접 화면에 출력하는 대신, @로 시작하는 사용자 정의 변수에 할당하는 것입니다. 변수에 값을 대입하는 SET 구문은 결과 집합을 반환하지 않으므로, 쿼리는 실행되지만 결과는 출력되지 않습니다.
mysql> set @TotalAmount=(select sum(Amount) from DemoTable709); Query OK, 0 rows affected (0.00 sec)
위 쿼리는 Amount 컬럼의 합계를 계산하여 @TotalAmount 변수에 저장합니다. "Query OK, 0 rows affected" 메시지만 표시되고 실제 값은 출력되지 않는 것을 확인할 수 있습니다.
저장된 변수 값 확인하기
나중에 저장된 값을 확인하고 싶다면 다음과 같이 변수를 단순히 SELECT 하면 됩니다.
mysql> select @TotalAmount;
실행 결과는 다음과 같습니다.
+--------------+ | @TotalAmount | +--------------+ | 9480 | +--------------+ 1 row in set (0.05 sec)
정리
이처럼 SET @변수명 = (서브쿼리) 형태를 사용하면 쿼리 실행 결과를 세션 동안 변수에 보관할 수 있습니다. 스크립트 작성 시 중간 계산 결과를 숨기거나, 여러 쿼리에서 동일한 값을 재사용해야 할 때 매우 유용한 기법입니다.