SQL/MySQL

[MySQL] CASE, IF(), IFNULL(), NULLIF()

jihuSunbae 2024. 10. 31. 20:19

 
 

목차


    INTRO

    MySQL에서는 다음의 4가지 함수들을 흐름 제어 함수(Flow Control Functions)이라고 한다!

    CASE Case operator
    IF() If/else construct
    IFNULL() Null if/else construct
    NULLIF() Return NULL if expr1 = expr2

    1. CASE 

    여러 가지 조건이 있을 때, 사용하는 함수이다. 

    * 마지막의 END를 꼭 써줘야한다. 

    CASE 
       WHEN 조건 THEN 결과값
       WHEN 조건 THEN 결과값
       ELSE 결과값
    END

     

     

    실제 활용

    select 문에서 CASE WHEN 절을 하나의 새로운 컬럼으로 정의해준다. 

    -> (CASE WHEN 절) AS 새로운컬럼명 으로 정의해준다.

    SELECT ID, 
      (CASE 
           WHEN SIZE_OF_COLONY <=100 THEN 'LOW'
           WHEN SIZE_OF_COLONY <=1000 THEN 'MEDIUM'
           ELSE 'HIGH'
       END) AS SIZE
       
    FROM ECOLI_DATA
    ORDER BY ID

     

    2. IF

    단일 조건을 적용해야할 때 사용

    IF(조건식, 조건이 참일 때 결과값, 조건이 거짓일 때 결과값)

     

    예시)

    SELECT IF(1<2,'yes','no'); # 'yes'

     

     

    3. IFNULL()

    IFNULL(expr1, expr2) # expr1이 NULL이면 expr2를 리턴
    • expr1이 NULL이면 exp2를 리턴, 
    • expr1이 NULL 이 아니면 expr1 자신을 반환
    예시) 
    SELECT IFNULL(4, 'not_null') # not_null 리턴
    SELECT IFNULL(NULL, 'not_null') #NULL 리턴
     

    결측값(NULL) 처리에 활용한다. 

    어떤 셀의 값이 NULL일 때, 다른 값으로 대체해야한다. 이떄 IFNULL()을 쓴다.

     

     

    +-------+--------------+------+----|
    | name  | Type         | age | Key |
    +-------+--------------+------+----|
    | test  | varbinary(4) | NULL |    |
    +-------+--------------+------+----|
    | test  | varbinary(4) | 24   |    |
    +-------+--------------+------+----+

     

    위처럼 age가 NULL인 데이터가 있을 수 있다. 이때 데이터를 활용하려면 NULL 값을 평균 연령으로 대체해야한다. 

    SELECT IFNULL('age', AVG(age)) 를 쓰면 가능

     

     

    cf) '변수명 IS NULL' 과의 차이

    IFNULL()은 NULL인 데이터를 찾아서, 다른 값으로 대체할 수있다는 장점이 있다!

     

     

     

    4. NULLIF

    • 두 값이 같은지를 비교해주는 함수 cf) ISNULL(): 1개의 변수가 Null인지 판단하는 함수 
    NULLIF(expr1,expr2)
    • expr1과 expr2가 같으면 NULL을, 다르면 expr1을 리턴해주는 함수이다. 
    SELECT NULLIF(1,1); # NULL
    SELECT NULLIF(1,0); #IF

     

     

    실제 어떻게 사용되나요? 

    - 컬럼에서 특정 값을 NULL로 바꾸고 싶을 떄 

    SELECT NULLIF(NAME, '홍길동'); # '홍길동' 이름은 NULL로 처리한다.

     

     

     

    + COALESCE() 를 통해서 여러 대상들에서, 처음으로 NULL이 아닌 최초의 값을 출력할 수 있다. 

    더보기

    SELECT COALESCE(대상1, 대상2, ..., 대상N, 그외리턴값)

    - 대상1, ... 대상N에서 처음으로 NULL값인 대상을 리턴한다. 

    - 모든 대상이 NULL이면, 그외의 리턴값이 반환된다. 

     

    다음 쿼리는 사용자 정보를 저장하는 쿼리문이다. 

    SELECT COALESCE(first_name, second_name, email)
    FROM TABLE1;

     

     

    1) first_name이 null이 아니고, second_name이 null -> first_name 반환 

    2)  first_name이 null이고, second_name이 null (X) -> second_name 반환 

    3) 둘다 Null 일 경우 email 반환 

    +) 2024.11.13

    MySQL에서는 

    NVL() 함수와 NVL2() 함수가 없다!

     

     

     

     


    COALESCE 문 예시 출처: 

    https://dbaant.tistory.com/33#google_vignette

     

    [MYSQL] Coalesce 함수 Null이 아닌 값 반환 사용 방법

    MySQL에서 COALESCE 함수는 입력된 값 중 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. COALESCE 함수는 두 개 이상의 인수를 받을 수 있습니다. 일반적인 사용법은 다음과 같습니다. COALESCE(expr1, exp

    dbaant.tistory.com

     

     

    'SQL > MySQL' 카테고리의 다른 글

    [MySQL] 날짜 형식 맞추기 DATE_FORMAT()  (0) 2024.10.31