MySQL에서는 SELECT ... INTO 명령을 사용하여 쿼리의 결과값을 사용자 정의 변수(@변수)에 저장할 수 있습니다. 이 기능은 특정 값을 여러 쿼리에서 재사용해야 하거나, 복잡한 로직을 단계별로 처리할 때 매우 유용합니다.
기본 문법
쿼리 결과를 변수에 저장하는 기본 문법은 다음과 같습니다.
SELECT yourColumnName1 INTO @anyVariableName FROM yourTableName WHERE yourColumnName2 = 'anyValue';
변수에 값이 제대로 저장되었는지 확인하려면 아래와 같이 SELECT 명령으로 변수를 조회하면 됩니다.
SELECT @anyVariableName;
예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 예제용 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> CREATE TABLE StudentInformation -> ( -> StudentId int, -> StudentName varchar(100), -> StudentAge int -> ); Query OK, 0 rows affected (0.62 sec)
데이터 삽입
이제 INSERT 명령을 사용하여 테이블에 학생 정보를 몇 개 삽입해 보겠습니다.
mysql> INSERT INTO StudentInformation VALUES(1,'John',23); Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO StudentInformation VALUES(2,'Adam',24); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO StudentInformation VALUES(3,'Bob',21); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO StudentInformation VALUES(4,'Carol',20); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO StudentInformation VALUES(5,'Mike',25); Query OK, 1 row affected (0.13 sec)
저장된 데이터 확인
SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM StudentInformation;
실행 결과는 다음과 같습니다.
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | John | 23 | | 2 | Adam | 24 | | 3 | Bob | 21 | | 4 | Carol | 20 | | 5 | Mike | 25 | +-----------+-------------+------------+ 5 rows in set (0.00 sec)
쿼리 결과를 변수에 저장하기
이제 쿼리 결과를 변수에 저장하는 핵심 부분입니다. 다음 쿼리는 'Adam'이라는 이름을 가진 학생의 나이를 @yourAge 변수에 저장합니다.
mysql> SELECT StudentAge INTO @yourAge FROM StudentInformation WHERE StudentName='Adam'; Query OK, 1 row affected (0.03 sec)
변수 값 확인
변수 @yourAge에 어떤 값이 저장되어 있는지 확인해 보겠습니다.
mysql> SELECT @yourAge;
실행 결과, Adam 학생의 나이인 24가 변수에 정상적으로 저장된 것을 확인할 수 있습니다.
+----------+ | @yourAge | +----------+ | 24 | +----------+ 1 row in set (0.00 sec)
정리 및 참고 사항
이처럼 MySQL의 SELECT ... INTO @변수 구문을 활용하면 쿼리 결과를 손쉽게 변수에 담아 재사용할 수 있습니다. 몇 가지 주의할 점은 다음과 같습니다.
- 쿼리 결과가 여러 행일 경우 에러가 발생할 수 있으므로, 반드시 단일 행만 반환되도록 조건을 지정해야 합니다.
- 사용자 정의 변수는 세션(session) 단위로 유지되며, 연결이 종료되면 사라집니다.
- 변수명 앞에는 반드시
@기호를 붙여야 합니다.