조금씩 꾸준히 완성을 향해

[MySQL] 조건문과 NULL ( IF, CASE, COALESCE, IFNULL) 본문

Database/MySQL

[MySQL] 조건문과 NULL ( IF, CASE, COALESCE, IFNULL)

all_sound 2022. 9. 20. 13:47

▶ IF (조건, T, F)   

:  조건이 참이라면 T, 거짓이면 F 반환

 

mysql> SELECT IF (1 > 2, '1는 2보다 크다.', '1은 2보다 작다.') AS '1 > 2',
    ->        IF (10 > 2, '10은 2보다 크다.', '10은 2보다 작다.') AS '10 > 2';
+-----------------+------------------+
| 1 > 2           | 10 > 2           |
+-----------------+------------------+
| 1은 2보다 작다.  | 10은 2보다 크다.  | 
+-----------------+------------------+

 

▶ CASE  WHEN .... THEN ....

SELECT CASE WHEN 조건식1 THEN 결과값1
            WHEN 조건식2 THEN 결과값2
            ELSE 결과값3 
            END
FROM 테이블이름

 

mysql> SELECT a,
    -> CASE
    -> WHEN a = 1 THEN '남자'
    -> WHEN a = 2 THEN '여자'
    -> WHEN a IS NULL THEN '데이터 누락'
    -> END '성별'
    -> FROM sample37;
+------+-------------+
| a    | 성별        |
+------+-------------+
|    1 | 남자        |
|    2 | 여자        |
| NULL | 데이터 누락 |
+------+-------------+

 

▶ COALESCE

 : 지정한 표현식들 중에 NULL이 아닌 값을 만나면 그 값을 반환하는 함수

  (처음으로 만나는 NULL이 아닌 값을 출력,  표현식이 모두 NULL일 경우엔 결과도 NULL 반환)

// NULL 처리 상황
SELECT COALESCE(Column명1, Column명1이 NULL인 경우 대체할 값)
FROM 테이블명

// 배타적 OR 관계 열
// Column1 ~ 4 중 NULL이 아닌 첫 번째 Column을 출력
SELECT COALESCE(Column명1, Column명2, Column명3, Column명4)
FROM 테이블명
mysql> SELECT a, COALESCE(a, 0) FROM sample37;
+------+----------------+
| a    | COALESCE(a, 0) |
+------+----------------+
|    1 |              1 |
|    2 |              2 |
| NULL |              0 |
+------+----------------+

 

▶ IFNULL

해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수

SELECT IFNULL(Column명, "Null일 경우 대체 값") 
FROM 테이블명;
mysql> SELECT IFNULL(a, "no data")
    -> FROM sample37;
+----------------------+
| IFNULL(a, "no data") |
+----------------------+
| 1                    |
| 2                    |
| no data              |
+----------------------+

 

 ※ IF + IS NULL 로도 쓸 수 있다. 

mysql> SELECT IF (ISNULL(a), "no data", a)
    -> FROM sample37;
+------------------------------+
| IF (ISNULL(a), "no data", a) |
+------------------------------+
| 1                            |
| 2                            |
| no data                      |
+------------------------------+