DECODE 함수
DECODE 함수는 여러 언어들 중 if / else 구문을 생각하면 된다.
DECODE 함수는 expression을 해독한 후 각각의 searchN에 대해 비교한다.
표현식의 결과가 searchN과 같으면 resultN이 반환된다.
기본 값이 생략되면 검색 값이 결과 값과 일치하지 않는 곳에 NULL 값이 반환된다.
SELECT DECODE('D',
'A', 'A입니다',
'B', 'B입니다',
'C', 'C입니다',
'전부아닙니다.')
FROM DUAL;
해석하자면
- 값 D가 주어지고 순서대로 조건을 나열한다.
- 값이 비교값 A 라면, 'A'입니다. 를 출력한다.
- C까지 전부 동일한 조건이고, 모두 틀릴 시 최하단 '전부아닙니다'를 출력한다.
SELECT FIRST_NAME,
DECODE(JOB_ID,
'AD-VP', SALARY * 1.1,
'IT_PROG', SALARY * 1.3,
'FI_MGR', SALARY * 1.5,
SALARY) AS 급여
FROM EMPLOYEES;
CASE ~ WHEN ~ THEN 구문
자바언어의 IF~ELSE 문 또는 SWITCH ~ CASE 문과 같은 기능을 한다.
CASE 뒤에 표현식이 있을 경우 WHEN에는 값이 오며, CASE 뒤에 아무것도 없을 경우 WHEN 에 조건식이 온다.
SELECT FIRST_NAME,
JOB_ID,
SALARY,
CASE JOB_ID WHEN 'AD_VP' THEN SALARY * 1.1
WHEN 'IT_PROG' THEN SALARY * 1.2
WHEN 'FI_MGR' THEN SALARY * 1.3
ELSE SALARY
END AS CASE문
FROM EMPLOYEES;
- EMPOLYEES 테이블에 FIRST_NAME, JOB_ID, SALARY 구문과 CASE 문을 찾는다.
- CASE는 문을 JOB_ID에서 WHNE 조건에 맞을 경우 THEN의 결과를 출력하도록 구현한다.
- 마지막에는 ELSE문을 사용하여 SALARY를 출력하는 이유는
- 별도로 설정하지 않는 이상 위에 WHEN 절 조건에 맞지 않는 값들은 모두 NULL 값으로 반환되기 떄문이다.
COALESCE 함수
NULL 이 아닌 첫 번째 인자값을 반환한다.
SELECT COALESCE(NULL, 'A', 'B') FROM DUAL;
SELECT COALESCE(NULL, NULL, 'B') FROM DUAL;
SELECT COALESCE('D', 'A', 'B') FROM DUAL;
연습문제 1
현재일자를 기준으로 EMPLOYEE테이블의 입사일자(hire_date)를 참조해서 근속년수가 10년 이상인
사원을 다음과 같은 형태의 결과를 출력하도록 쿼리를 작성해 보세요.
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME ||' '|| LAST_NAME AS 사원명,
HIRE_DATE AS 입사일자,
TO_CHAR((SYSDATE - HIRE_DATE)/365, '99') AS 근속년수
FROM EMPLOYEES
WHERE TO_CHAR((SYSDATE - HIRE_DATE)/365, '99') >= 10
ORDER BY HIRE_DATE;
연습문제2
EMPLOYEE 테이블의 manager_id컬럼을 확인하여 first_name, manager_id, 직급을 출력합니다.
SELECT FIRST_NAME, DEPARTMENT_ID ,MANAGER_ID,
CASE MANAGER_ID WHEN 100 THEN '사원'
WHEN 120 THEN '주임'
WHEN 121 THEN '대리'
WHEN 122 THEN '과장'
ELSE '임원'
END AS 직급
FROM EMPLOYEES WHERE DEPARTMENT_ID = 50;
728x90
'Programming > Database' 카테고리의 다른 글
[Database] - Group 함수 (그룹함수) (1) | 2023.12.05 |
---|---|
[Database] 함수 - 집합연산자와 분석함수 (1) | 2023.12.05 |
[Database] 함수 : 숫자, 날짜 함수 그리고 변환 함수 (1) | 2023.12.04 |
[Database] 함수 : 문자형 (0) | 2023.12.01 |
[Database] DML TEST (0) | 2023.12.01 |