본문 바로가기

오라클

오라클 SQL DECODE와 CASE(조건문, 비교)

목차

    decode와 case는 조건을 평가해서 결과를 반환한다는 점, 즉 프로그램에서 IF~ELSE와 유사하지만 몇 가지 차이가 있습니다.

    decode는 "="조건에서만 사용 가능하며 오라클에서만 사용 가능한 함수입니다.

    case가 ANSI SQL을 준수하는 것과는 다릅니다.

    등가연산이라면 case를 decode로 변환 가능 할 것입니다.

    아래는 같은 결과를 보여주는 decode와 case의 예시입니다.

     

    같은 결과를 반환하는 decode와 case
    같은 결과를 반환하는 decode와 case

     

     

     


    DECODE

     

    decode(expression,search1,result1[,search2,result2,...][,default])

     

    expression: 데이터 셋에서 비교할 값(컬럼)입니다.
    search1: expression과 비교할 값입니다. 일치하면 result1을 리턴합니다.
    result1: expression=search1이면 리턴되는 값입니다.

     

    search2~result2와 같은 세트는 필요에 따라 늘어날 수 있습니다.

     

    기본값이 생략된 경우 검색 값과 일치하는 결과 값이 없으면 null 값이 반환됩니다.

    예를 들어 아래와 같이 사용할 수 있습니다.

     

    select decode(gender, 'M', 'Male', 'F', 'Female', 'Unknown') as gender
    from employees;

     

    식을 평가하고 검색 식과 일치하는 첫 번째 식을 기반으로 결과를 반환합니다. 

    일치하는 항목이 없으면 기본 결과를 반환합니다. 

    위 예시는 성별 열의 값이 "M"이면 "Male"을 반환하고, 값이 "F"이면 "Female"을 반환하며, 다른 값이면 "Unknown"을 반환합니다.

     

     

     


    CASE

    CASE expr WHEN comparison_expr1 THEN return_expr1
    [WHEN comparison_expr2 THEN return_expr2
    WHEN comparison_exprn THEN return_exprn
    ELSE else_expr]
    END

     

    comparison_expr1: 비교문입니다. 충족할 경우 return_expr1을 반환합니다.
    return_expr1: comparison_expr1이 참인 경우 반환되는 값입니다.
    else_expr: expr이 만족하는 조건이 없는 경우 반환되는 값입니다.

     

    comparison_expr1~return_expr1 세트는 필요에 따라 늘어날 수 있습니다.

    참인 첫 번째 조건을 기반으로 결과를 반환합니다. 어떤 조건도 참이 아니면 기본 결과를 반환합니다. 

    아래와 같이 사용할 수 있습니다.

     

    select 
      name, 
      case 
        when salary > 5000 then 'High' 
        when salary > 3000 then 'Medium' 
        else 'Low' 
      end as salary_range
    from employees;

     

    직원의 급여가 5000보다 크면 "High"를 반환하고 급여가 3000보다 크면 "Medium"을 반환하며 다른 모든 값에 대해서는 "Low"를 반환합니다.