Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

여러 행을 반환하는 쿼리로 MySQL 사용자 변수에 값을 할당하면 어떻게 될까?

여러 개의 행을 반환하는 명령문을 사용해 사용자 변수(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 문으로 값을 할당하면, 각 행마다 값이 덮어써집니다.
  • 따라서 최종적으로 변수에는 결과 집합의 마지막 행 값이 저장됩니다.