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

MySQL MAKE_SET() 함수로 테이블 열 값을 값 집합으로 반환하는 방법

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 처리 없이도 깔끔하게 열 값을 조합할 수 있습니다.