개요
MySQL에서 테이블의 특정 행에 있는 단일 값을 조회하여 변수에 저장하고 싶다면, SELECT ... INTO 변수 구문과 WHERE 절을 함께 사용하면 됩니다. 이 방법을 사용하면 쿼리 결과를 별도의 처리 없이 바로 사용자 정의 변수에 담아 활용할 수 있습니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1. 샘플 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1896
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20),
StudentMarks int
);
Query OK, 0 rows affected (0.00 sec)
위 테이블은 학생 ID, 이름, 점수를 저장하는 구조로, StudentId는 자동 증가 기본 키로 설정되어 있습니다.
2. 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1896(StudentName,StudentMarks) values('Chris',56);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1896(StudentName,StudentMarks) values('David',98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1896(StudentName,StudentMarks) values('Mike',89);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1896(StudentName,StudentMarks) values('Sam',78);
Query OK, 1 row affected (0.00 sec)3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1896;
실행 결과는 다음과 같습니다.
+-----------+-------------+--------------+
| StudentId | StudentName | StudentMarks |
+-----------+-------------+--------------+
| 1 | Chris | 56 |
| 2 | David | 98 |
| 3 | Mike | 89 |
| 4 | Sam | 78 |
+-----------+-------------+--------------+
4 rows in set (0.00 sec)
4. 특정 행의 값을 변수로 가져오기
이제 핵심인 쿼리입니다. 먼저 변수를 NULL로 초기화한 뒤, WHERE 조건에 맞는 행의 값을 SELECT INTO로 변수에 저장합니다.
mysql> set @Name:=NULL;
Query OK, 0 rows affected (0.00 sec)
mysql> select StudentName into @Name from DemoTable1896 where StudentMarks=98;
Query OK, 1 row affected (0.00 sec)
위 쿼리는 StudentMarks가 98인 행의 StudentName 값을 @Name 변수에 할당합니다.
5. 변수 값 확인
저장된 변수의 값을 출력해 보겠습니다.
mysql> select @Name;
실행 결과:
+-------+
| @Name |
+-------+
| David |
+-------+
1 row in set (0.00 sec)
점수가 98점인 학생의 이름인 'David'가 변수에 정상적으로 저장된 것을 확인할 수 있습니다.
마무리 및 참고 사항
이처럼 SELECT ... INTO @변수 구문을 사용하면 특정 행의 단일 컬럼 값을 손쉽게 변수에 담아 재사용할 수 있습니다. 다만 몇 가지 주의할 점이 있습니다.
- WHERE 조건에 해당하는 행이 여러 개면 오류가 발생하거나 의도하지 않은 결과가 나올 수 있으므로, 조건이 하나의 행만 반환하도록 설계하는 것이 안전합니다.
- 조건에 맞는 행이 없으면 변수는 NULL 상태로 유지됩니다.
- 여러 컬럼 값을 동시에 가져오려면
select col1, col2 into @var1, @var2형태로 작성할 수 있습니다.