MySQL에서는 SELECT 문으로 조회한 값을 사용자 정의 변수에 저장할 수 있습니다. 이 기능은 쿼리 결과를 재사용하거나 여러 문장에서 동일한 값을 참조해야 할 때 매우 유용합니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다. 학생 ID와 이름을 저장하는 간단한 테이블입니다.
mysql> create table DemoTable631 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(100)
);
Query OK, 0 rows affected (0.83 sec)
2. 데이터 삽입
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable631(StudentName) values('John Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable631(StudentName) values('Adam Smith');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable631(StudentName) values('David Miller');
Query OK, 1 row affected (0.16 sec)
3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable631;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 1 | John Smith | | 2 | Adam Smith | | 3 | David Miller | +-----------+--------------+ 3 rows in set (0.00 sec)
4. SELECT 결과를 변수에 저장하기
핵심 부분입니다. SET 문과 함께 서브쿼리를 사용하면 SELECT 문의 결과값을 변수에 저장할 수 있습니다. 변수 이름 앞에는 반드시 @ 기호를 붙여야 합니다.
mysql> set @fullName=(select StudentName from DemoTable631 where StudentId=2); Query OK, 0 rows affected (0.00 sec)
위 쿼리는 StudentId가 2인 학생의 이름을 @fullName이라는 변수에 저장합니다.
5. 변수 값 출력하기
저장된 변수의 값은 일반적인 SELECT 문으로 간단히 확인할 수 있습니다.
mysql> select @fullName;
실행 결과는 다음과 같습니다.
+------------+ | @fullName | +------------+ | Adam Smith | +------------+ 1 row in set (0.00 sec)
정리 및 참고 사항
이처럼 SET @변수명 = (SELECT ...) 형식을 사용하면 쿼리 결과를 세션 변수에 손쉽게 저장할 수 있습니다. 몇 가지 주의할 점은 다음과 같습니다.
- 서브쿼리는 반드시 단일 값(single scalar value)을 반환해야 합니다. 여러 행이 반환되면 오류가 발생합니다.
- 사용자 정의 변수는 해당 세션(session) 내에서만 유효하며, 연결이 종료되면 사라집니다.
- 변수 이름은 대소문자를 구분하지 않지만, 의미 있는 이름을 사용하는 것이 좋습니다.
SET대신SELECT ... INTO @변수명구문을 사용할 수도 있습니다.
이 방법을 활용하면 복잡한 쿼리에서 중간 결과를 저장하고 재사용하여 코드의 가독성과 효율성을 높일 수 있습니다.