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

MySQL에서 세 개의 열에 있는 고유한 값을 하나의 열로 추출하는 방법

MySQL에서 여러 열에 흩어져 있는 값들을 중복 없이 하나의 열로 모아서 조회해야 하는 경우가 있습니다. 이럴 때는 UNION을 단일 쿼리 안에서 여러 번 사용하면 간단하게 해결할 수 있습니다. UNION은 기본적으로 중복된 값을 제거하고 결과를 반환하기 때문에, 각 열의 값을 합치면서 자동으로 고유한(distinct) 값만 남길 수 있습니다.

1. 테이블 생성하기

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
    -> (
    -> Value1 int,
    -> Value2 int,
    -> Value3 int
    -> );
Query OK, 0 rows affected (0.69 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다. 일부 행에는 NULL 값이 포함되어 있고, 일부 행에는 여러 열에 값이 들어 있습니다.

mysql> insert into DemoTable values(20,null,null);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(20,null,null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(20,null,null);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(10,null,null);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(80,20,100);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(10,null,null);
Query OK, 1 row affected (0.16 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회해 봅니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
|     20 |   NULL |   NULL |
|     20 |   NULL |   NULL |
|     20 |   NULL |   NULL |
|     10 |   NULL |   NULL |
|     80 |     20 |    100 |
|     10 |   NULL |   NULL |
+--------+--------+--------+
6 rows in set (0.00 sec)

4. 세 개의 열을 하나로 합쳐 고유한 값만 조회하기

아래 쿼리는 세 개의 열(Value1, Value2, Value3)에서 고유한 값을 추출하여 하나의 열로 표시합니다. 각 SELECT 결과를 UNION으로 결합한 뒤, 서브쿼리에서 NULL이 아닌 값만 필터링하고 오름차순으로 정렬했습니다.

mysql> select *from
    -> (
    -> select Value1 as AllValue from DemoTable
    -> union
    -> select Value2 as AllValue from DemoTable
    -> union
    -> select Value3 as AllValue from DemoTable
    -> ) tbl where AllValue IS NOT NULL
    -> order by AllValue;

실행 결과는 다음과 같습니다.

+----------+
| AllValue |
+----------+
|       10 |
|       20 |
|       80 |
|      100 |
+----------+
4 rows in set (0.00 sec)

핵심 정리

이 방식의 핵심 포인트는 다음과 같습니다.

- UNION 활용: UNION은 중복을 자동으로 제거하므로, 별도의 DISTINCT 처리 없이 고유한 값만 얻을 수 있습니다.
- NULL 필터링: 빈 열이 많은 테이블에서는 NULL 값이 함께 반환되므로, WHERE 절에서 IS NOT NULL 조건으로 걸러주는 것이 좋습니다.
- 별칭(Alias) 지정: 각 SELECT 문에서 동일한 별칭(AllValue)을 사용하면 최종 결과의 열 이름이 깔끔하게 유지됩니다.

이처럼 UNION을 여러 번 조합하면 여러 열에 분산된 데이터를 손쉽게 하나의 고유한 값 목록으로 변환할 수 있습니다.