티스토리 뷰
일반 함수
NVL() 함수
: NULL값을 만나면 다른 값으로 치환해서 출력하는 함수
--수수료율(commission_pct)가 있는 경우는 salary*commission_pct 하고 없는 경우 0으로 출력 SELECT first_name as "이름", commission_pct*salary as "수수료" FROM EMPLOYEES; --수수료 없으면(null이면) 0으로 대체 SELECT first_name as "이름", NVL(commission_pct*salary, 0) as "수수료" FROM EMPLOYEES;
--부서 코드가 없으면 '99999' 출력, 있으면 그대로 부서 아이디 출력 SELECT first_name as "이름", NVL(DEPARTMENT_ID, 99999) as "부서 코드" FROM EMPLOYEES;
NVL2() 함수
: NVL함수의 확장으로 NULL 값이 아닐 경우 출력할 값을 지정할 수 있음
DECODE() 함수
: 일반 개발 언어에서의 IF문과 같은 개념
1) decode(A, B, T) if (A == B) { T } 2) decode(A, B, T, F) if (A == B) { T } else { F } 3) decode(A, B, 가, C, 나, D, 다, 라) if (A == B) { 가 } else if (A == C) { 나 } else if (A == D) else { 라 } 4) decode(A, B, decode(C, D, 가, 나)) if (A == B) { if (C == D) { 가 } else { 나 } } else { null }
--부서 코드가 80번이면 '우리 부서' 출력 else NULL SELECT FIRST_NAME as "이름", DEPARTMENT_ID as "부서 번호", DECODE(DEPARTMENT_ID, 80, '우리 부서') as "부서 코드" FROM EMPLOYEES;
--부서 코드가 80번이면 '우리 부터', else '타 부서' ; DECODE SELECT FIRST_NAME as "이름", DEPARTMENT_ID as "부서 번호", DECODE(DEPARTMENT_ID, 80, '우리 부서', '타 부서') as "부서 소속" FROM EMPLOYEES;
--부서 코드가 80번이면 '우리 부서', 90번이면 '경쟁 부서', 100번이면 '우수 부서' 출력 DECODE SELECT FIRST_NAME as "이름", DEPARTMENT_ID as "부서 번호", DECODE(DEPARTMENT_ID, 80, '우리 부서', 90, '경쟁 부서', 100, '우수 부서') as "부서 소속" FROM EMPLOYEES;
--매니저 아이디가 145이고, 부서 코드가 80번일 때 '우리반 우수 직원'을 출력 ; DECODE SELECT FIRST_NAME as "이름", MANAGER_ID as "매니저 아이디", DEPARTMENT_ID as "부서 코드", DECODE(DEPARTMENT_ID, 80, DECODE(MANAGER_ID, 145, '우수 직원')) as "우수 직원 표시란" FROM EMPLOYEES;
CASE 문
case 조건 when 결과1 then 처리 내용1 when 결과2 then 처리 내용2 when 결과2 then 처리 내용3 end "가상의 컬럼명"
--부서 코드가 80번이면 '우리 부서', 90번이면 '경쟁 부서', 100번이면 '우수 부서' 출력 : CASE SELECT FIRST_NAME as "사원", CASE DEPARTMENT_ID WHEN 80 THEN '우리 부서' WHEN 90 THEN '경쟁 부서' WHEN 100 THEN '우수 부서' END "부서 현황" FROM EMPLOYEES;
--급여가 5000 이하면 '저연봉 사원', 5000~10000 이면 '일반 사원', 10000 초과면 '고연봉 사원' 출력 : case SELECT FIRST_NAME as "사원", SALARY as "연봉", CASE WHEN SALARY<=5000 THEN '저연봉 사원' WHEN SALARY>5000 AND SALARY<10000 THEN '일반 사원' WHEN 10000<SALARY THEN '고연봉 사원' END "연봉별 등급" FROM EMPLOYEES;
--근속 년수가 10년 이상이면 '근속 우수 사원' 15년 이상이면 '장기 근속 우수 사원' 을 출력 - CASE SELECT first_name as "사원", FLOOR((TO_CHAR(SYSDATE, 'rrrr') - TO_CHAR(HIRE_DATE, 'rrrr'))) as "근무 년수", CASE WHEN FLOOR((TO_CHAR(SYSDATE, 'rrrr') - TO_CHAR(HIRE_DATE, 'rrrr')))>=15 then '장기근속 우수 사원' WHEN FLOOR((TO_CHAR(SYSDATE, 'rrrr') - TO_CHAR(HIRE_DATE, 'rrrr')))>=10 THEN '근속 우수 사원' end "근속 현황" FROM EMPLOYEES;
ver.2
SELECT first_name as "사원", HIRE_DATE as "입사일", CASE WHEN MONTHS_BETWEEN(SYSDATE, HIRE_DATE)>=180 then '장기근속 우수 사원' WHEN MONTHS_BETWEEN(SYSDATE, HIRE_DATE)>=120 THEN '근속 우수 사원' end "근속 현황" FROM EMPLOYEES;
'DBMS > Oracle 11g' 카테고리의 다른 글
5. JOIN in SQL (0) | 2017.09.28 |
---|---|
5. SQL 복수행 함수(Multi-row function) 연습 (0) | 2017.09.27 |
4. 단일행 함수(Single-Row Function) PART-2 (0) | 2017.09.26 |
4. 단일행 함수(Single-Row Function) PART-1 (0) | 2017.09.26 |
3. ORDER BY 절 (0) | 2017.09.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- GROUP BY절
- NVL2()
- DECODE()
- SQL Operator
- FileChannel
- 타입변환과 다형성
- 데이터 딕셔너리
- 테이블 데이터 복사
- Generic Type
- 상속
- NVL()
- casring
- IN(var1 var2 var3)
- hierarchical query
- implements
- tables in htmll
- SELECT절 명령어
- IS RECORD
- 중첩 클래스
- z-dindex
- CLASS
- 계층형 쿼리
- 복수행 함수
- DI(의존성 주입)
- !(not)
- 로컬 클래스
- MONTH_BETWEEN
- 멤버 클래스
- Maven Project
- Interface
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함