여러 개의 행을 반환하는 명령문을 사용해 사용자 변수(user variable)에 값을 할당하면 어떤 결과가 나올까요? 결론부터 말하면, 사용자 변수에는 단 하나의 값만 저장할 수 있기 때문에 결과 집합 중 마지막 행의 값만 변수에 남게 됩니다.
예제: Tender 테이블 데이터 확인
아래 예제는 'Tender'라는 테이블의 데이터를 사용하여 이 동작을 보여줍니다.
mysql> select * from Tender; +----+---------------+--------------+ | Sr | CompanyName | Tender_value | +----+---------------+--------------+ | 1 | Abc Corp. | 250.369003 | | 2 | Khaitan Corp. | 265.588989 | | 3 | Singla group. | 220.255997 | | 4 | Hero group. | 221.253006 | | 5 | Honda group | 225.292266 | +----+---------------+--------------+ 5 rows in set (0.04 sec)
위 결과 집합은 'Tender' 테이블에 저장된 전체 데이터를 보여줍니다. 이제 'companyname' 컬럼의 값들을 @name이라는 변수에 순차적으로 할당해 보겠습니다.
변수에 여러 행의 값 할당하기
mysql> Select @name := companyname from tender; +----------------------+ | @name := companyname | +----------------------+ | Abc Corp. | | Khaitan Corp. | | Singla group. | | Hero group. | | Honda group | +----------------------+ 5 rows in set (0.00 sec)
쿼리 실행 시 다섯 개의 행이 모두 출력되었지만, 이는 각 행을 읽어갈 때마다 변수에 값이 덮어써졌음을 의미합니다. 즉, 할당 자체는 매 행마다 일어나지만 최종적으로 변수에는 마지막으로 처리된 값만 남습니다.
변수 값 확인
mysql> Select @name; +-------------+ | @name | +-------------+ | Honda group | +-------------+ 1 row in set (0.00 sec)
@name 변수를 조회하면 마지막 행에 있던 'Honda group'이라는 회사명만 반환되는 것을 확인할 수 있습니다. 그 이유는 MySQL의 사용자 변수가 오직 단일 값(single value)만 저장할 수 있기 때문입니다.
정리
- MySQL 사용자 변수는 하나의 값만 가질 수 있습니다.
- 여러 행을 반환하는 SELECT 문으로 값을 할당하면, 각 행마다 값이 덮어써집니다.
- 따라서 최종적으로 변수에는 결과 집합의 마지막 행 값이 저장됩니다.