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

MySQL에서 COALESCE() 함수로 NULL이 아닌 첫 번째 값 조회하는 방법

MySQL에서 COALESCE() 함수는 여러 컬럼의 값을 순서대로 검사하여 NULL이 아닌 첫 번째 값을 반환하는 함수입니다. 이 기능을 활용하면 두 개 이상의 컬럼 중 실제 데이터가 존재하는 값을 손쉽게 추출할 수 있습니다.

1. 샘플 테이블 생성

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1927
    (
    StudentName varchar(20),
    StudentSubject varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

INSERT 문을 사용해 일부 레코드를 추가합니다. 의도적으로 NULL 값도 포함시켰습니다.

mysql> insert into DemoTable1927 values('Chris','MySQL');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1927 values('David',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1927 values(NULL,'MongoDB');
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1927;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| Chris       |         MySQL  |
| David       |         NULL   |
| NULL        |      MongoDB   |
+-------------+----------------+
3 rows in set (0.00 sec)

결과를 보면 'David' 행은 과목(StudentSubject)이 NULL이고, 세 번째 행은 이름(StudentName)이 NULL인 것을 확인할 수 있습니다.

4. COALESCE() 함수 적용하기

이제 COALESCE() 함수를 사용하여 각 행에서 NULL이 아닌 첫 번째 값을 가져오는 쿼리를 작성해 보겠습니다.

mysql> select coalesce(StudentName,StudentSubject) as Result from DemoTable1927;

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

+---------+
| Result  |
+---------+
| Chris   |
| David   |
| MongoDB |
+---------+
3 rows in set (0.00 sec)

결과 분석

  • 'Chris': 이름과 과목 모두 값이 있으므로 첫 번째 인수인 StudentName 값이 그대로 반환됩니다.
  • 'David': 과목이 NULL이므로 NULL이 아닌 이름 값이 반환됩니다.
  • 'MongoDB': 이름이 NULL이므로 두 번째 인수인 과목 값이 대신 반환됩니다.

이처럼 COALESCE() 함수는 인수 목록을 왼쪽에서 오른쪽으로 검사하며 가장 먼저 만나는 NULL이 아닌 값을 결과로 돌려줍니다. 만약 모든 인수가 NULL이라면 최종 결과 역시 NULL이 반환됩니다. NULL 값 처리나 기본값 대체 로직이 필요할 때 매우 유용하게 활용할 수 있습니다.