MySQL의 MAKE_SET() 함수를 활용하면 테이블에 있는 여러 열(column)의 값을 하나의 값 집합(set) 형태로 반환할 수 있습니다. 이 함수는 지정한 비트(bit) 값을 기준으로 해당 위치의 문자열들을 선택하고, 선택된 값들을 쉼표(,)로 구분하여 하나의 문자열로 묶어줍니다.
예제 데이터 준비
이해를 돕기 위해 다음과 같은 데이터를 가진 Student_Name 테이블을 예로 들어 보겠습니다.
mysql> Select * from Student_Name; +---------+-------+---------+ | FName | Mname | Lname | +---------+-------+---------+ | Rahul | NULL | Singh | | Gaurav | Kumar | NULL | | Harshit | NULL | Khurana | | Yash | Pal | Sharma | +---------+-------+---------+ 4 rows in set (0.00 sec)
MAKE_SET() 함수로 특정 열 값 묶기
이제 'FName'과 'LName' 열의 값들을 하나의 집합으로 만들고 싶다면 다음과 같은 쿼리를 실행하면 됩니다.
mysql> Select MAKE_SET(1|4,fname,mname,lname) AS '(Fname,Lname)' from Student_name; +-----------------+ | (Fname,Lname) | +-----------------+ | Rahul,Singh | | Gaurav | | Harshit,Khurana | | Yash,Sharma | +-----------------+ 4 rows in set (0.00 sec)
결과 분석
쿼리에서 사용한 1|4는 비트 OR 연산으로, 이진수로 표현하면 101입니다. MAKE_SET() 함수에서는 첫 번째 문자열 인자(fname)가 비트 1(2⁰), 두 번째 인자(mname)가 비트 2(2¹), 세 번째 인자(lname)가 비트 4(2²)에 각각 대응됩니다. 따라서 1|4를 지정하면 fname과 lname만 선택되고, 중간에 있는 mname은 자동으로 제외됩니다.
또 한 가지 주목할 점은 NULL 값은 결과 집합에 포함되지 않는다는 것입니다. 예를 들어 Gaurav의 경우 Lname이 NULL이므로 'Gaurav'라는 이름만 반환된 것을 확인할 수 있습니다. 이러한 특성 덕분에 NULL 처리 없이도 깔끔하게 열 값을 조합할 수 있습니다.