
목차
decode와 case는 조건을 평가해서 결과를 반환한다는 점, 즉 프로그램에서 IF~ELSE와 유사하지만 몇 가지 차이가 있습니다.
decode는 "="조건에서만 사용 가능하며 오라클에서만 사용 가능한 함수입니다.
case가 ANSI SQL을 준수하는 것과는 다릅니다.
등가연산이라면 case를 decode로 변환 가능 할 것입니다.
아래는 같은 결과를 보여주는 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"를 반환합니다.
'오라클' 카테고리의 다른 글
쿼리에서 중복을 제거하는 방법(DISTINCT와 GROUP BY 차이점) (0) | 2023.03.24 |
---|---|
오라클 데이터 타입과 정확히 작성해야 하는 이유 (0) | 2023.03.22 |
sql에서 가독성을 높이는 별칭 사용법(Column Aliases, Table Aliases) (0) | 2023.03.18 |
10 x null = ?, null(널)에 대해 알아야할 사항 (0) | 2023.03.16 |
SQL에서 산술 연산자 종류, 우선순위, 팁(암시적 변환, 정밀도 및 배율, 오버플로, 언더플로) (0) | 2023.03.15 |