함수(FUNCTION) : 컬럼 값을 읽어서 계산한 결과를 리턴함
단일행(SINGLE ROW) 함수 : 컬럼에 기록 된 N개의 값을 읽어서 N개의 결과를 리턴
그룹(GROUP) 함수 : 컬럼에 기록 된 N개의 값을 읽어서 한 개의 결과를 리턴
SELECT절에서 단일행 함수와 그룹 함수를 함께 사용 못한다 : 결과 행의 갯수가 다르기 때문에
그룹함수 : SUM, AVG, MAX, MIN, COUNT
SUM(숫자가 기록된 컬럼명) : 합계를 구하여 리턴
SELECT
SUM(SALARY)
FROM EMPLOYEE;
AVG(숫자가 기록된 컬럼명) : 평균을 구하여 리턴
SELECT
AVG(SALARY)
FROM EMPLOYEE;
MIN(컬럼명) : 컬럼에서 가장 작은 값 리턴
취급하는 자료형은 ANY TYPE
SELECT
MIN(EMAIL)
, MIN(HIRE_DATE)
, MIN(SALARY)
FROM EMPLOYEE;
COUNT ( * | 컬럼명 ) : 행의 갯수를 헤아려서 리턴
COUNT ( [DISTINCT] 컬럼명 ) : 중복을 제거한 행 갯수 리턴
COUNT ( * ) : NULL을 포함한 전체 행 갯수 리턴
COUNT ( 컬럼명 ) : NULL을 제외한 실제 값이 기록된 행 갯수 리턴
SELECT
COUNT(*)
, COUNT(DEPT_CODE)
, COUNT(DISTINCT DEPT_CODE)
FROM EMPLOYEE;
단일행 함수
문자 관련 함수 : LENGTH, LENGTHB, SUBSTR, UPPER, LOWER, INSTR...
LENGTHB 는 BYTE의 크기
SELECT
LENGTH('오라클')
, LENGTHB('오라클')
FROM DUAL;
SELECT
LENGTH(EMAIL)
, LENGTHB(EMAIL)
FROM EMPLOYEE;
INSTR( '문자열' | 컬럼명, '문자', 찾을 위치의 시작값, [빈도] )
SELECT
EMAIL
, INSTR(EMAIL, '@', -1) 위치
FROM EMPLOYEE;
SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL;
SELECT INSTR('AABAACAABBAA', 'B', 1) FROM DUAL;
SELECT INSTR('AABAACAABBAA', 'B', -1) FROM DUAL; --뒤에서 첫번째
SELECT INSTR('AABAACAABBAA', 'B', 1, 2) FROM DUAL; --앞에서 두번째
SELECT INSTR('AABAACAABBAA', 'B', -1, 2) FROM DUAL; --뒤에서 두번째
LPAD / RPAD : 주어진 컬럼 문자열에 임의의 문자열을 덧붙여 길이 N의 문자열을 반환하는 함수
SELECT
LPAD(EMAIL, 20, '#')
FROM EMPLOYEE;
SELECT
LPAD(EMAIL, 10)
FROM EMPLOYEE;
SELECT
RPAD(EMAIL, 10)
FROM EMPLOYEE;
LTRIM / RTRIM : 주어진 컬럼이나 문자열 왼쪽/오른쪽에서 지정한 문자 혹은 문자열을 제거한 나머지를 반환하는 함수이다.
SELECT RTRIM('GREEDY ') FROM DUAL;
SELECT RTRIM('GREEDY', ' ') FROM DUAL;
SELECT RTRIM('123456000', '0') FROM DUAL;
SELECT RTRIM('123123GREEDY123123', '123') FROM DUAL;
SELECT RTRIM('GREEDYACABAC', 'ABC') FROM DUAL;
SELECT RTRIM('GREEDY5782', '0123456789') FROM DUAL;
TRIM : 주어진 컬럼이나 문자열의 앞/뒤에 지정한 문자를 제거
LEADING : 왼쪽 / TRAILING : 오른쪽
SELECT TRIM(' GREEDY ') FROM DUAL;
SELECT TRIM('Z' FROM 'ZZZGREEDYZZZ') FROM DUAL;
SELECT TRIM(LEADING 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; --LTRIM처럼 동일
SELECT TRIM(TRAILING 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; --RTRIM
SELECT TRIM(BOTH 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL;
SUBSTR : 컬럼이나 문자열에서 지정한 위치로부터 지정한 갯수의 문자열을 잘라서 리턴하는 함수이다.
SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) FROM DUAL;
SELECT SUBSTR('SHOWMETHEMONEY', 7) FROM DUAL;
SELECT SUBSTR('SHOWMETHEMONEY', -8, 3) FROM DUAL;
SELECT SUBSTR('쇼우 미 더 머니', 2, 5) FROM DUAL;
EMPLOYEE 테이블에서 직원들의 주민번호를 조회하여 사원명, 생년, 생월, 생일을 각각 분리하여 조회
단, 컬럼의 별칭은 사원명, 생년, 생월, 생일로 한다.
SELECT
EMP_NAME 사원명
, SUBSTR(EMP_NO, 1, 2) 생년
, SUBSTR(EMP_NO, 3, 2) 생월
, SUBSTR(EMP_NO, 5, 2) 생일
FROM EMPLOYEE;
날짜 데이터에서 사용할 수 있다.
직원들의 입사일에도 입사년도, 입사월, 입사 날짜를 분리하여 조회
SELECT
HIRE_DATE
, SUBSTR(HIRE_DATE, 1, 2) 입사년도
, SUBSTR(HIRE_DATE, 4, 2) 입사월
, SUBSTR(HIRE_DATE, 7, 2) 입사날짜
FROM EMPLOYEE;
WHERE절에서도 함수 사용이 가능하다.
EMP_NO를 통해 성별을 판단하여 여성 직원들의 모든 컬럼 정보를 조회하세요
SELECT
*
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) = '2';
WHERE절에서는 단일행 함수만 사용 가능하다. (에러발생)
SELECT
*
FROM EMPLOYEE
WHERE SALARY > AVG(SALARY);
함수 중첩 사용 가능 : 함수 안에서 함수를 사용할 수 있음
EMPLOYEE 테이블에서 사원명, 주민번호 조회
단, 주민번호는 생년월일만 보이게 하고, '-' 다음의 값은 '*'로 바꿔서 출력
SELECT
EMP_NAME
, RPAD(SUBSTR(EMP_NO, 1, 7), 14, '*')
FROM EMPLOYEE;
EMPLOYEE 테이블에 사원명, 이메일과 @ 이후를 제외한 아이디 조회
SELECT
EMP_NAME
, EMAIL
, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@')-1)
FROM EMPLOYEE;
SUBSTRB : 바이트 단위로 추출하는 함수(결과값 동일)
SELECT
SUBSTR('ORACLE', 3, 2)
, SUBSTRB('ORACLE', 3, 2)
FROM DUAL;
SELECT
SUBSTR('오라클', 2, 2)
, SUBSTRB('오라클', 4, 6)
FROM DUAL;
LOWER / UPPER / INITCAP : 대소문자 변경해주는 함수
LOWER(문자열 | 컬럼) : 소문자로 변경해주는 함수
SELECT
LOWER('Welcome To My World')
FROM DUAL;
UPPER(문자열 | 컬럼) : 대문자로 변경해주는 함수
SELECT
UPPER('Welcome To My World')
FROM DUAL;
INITCAP(문자열 | 컬럼) : 앞 글자만 대문자로 변경해주는 함수
SELECT
INITCAP('welcome To My World')
FROM DUAL;
CONCAT : 문자열 혹은 컬럼 두 개를 입력 받아 하나로 합친 후 리턴
SELECT
CONCAT('가나다라', 'ABCD')
FROM DUAL;
SELECT
'가나다라' || 'ABCD'
FROM DUAL;
REPLACE : 컬럼 혹은 문자열을 입력 받아 변경하고자 하는 문자열을 변경하려고 하는 문자열로 바꾼 후 리턴
SELECT
REPLACE('서울시 강남구 역삼동', '역삼동', '삼성동')
FROM DUAL;
숫자 처리 함수 : ABS, MOD, ROUND, FLOOR, TRUNC, CELL
ABS(숫자 | 숫자로 된 컬럼명) : 절대값 구하는 함수
SELECT
ABS(-10)
, ABS(10)
FROM DUAL;
MOD(숫자 | 숫자로 된 컬럼명, 숫자 | 숫자로 된 컬럼명) : 두 수를 나누어서 나머지를 구하는 함수
처음 인자는 나누어지는 수, 두 번째 인자는 나눌 수
SELECT
MOD(10, 5)
, MOD(10, 3)
FROM DUAL;
ROUND(숫자 | 숫자로 된 컬럼명, [위치]) : 반올림해서 리턴하는 함수
SELECT ROUND(123.456) FROM DUAL;
SELECT ROUND(123.456, 0) FROM DUAL;
SELECT ROUND(123.456, 1) FROM DUAL;
SELECT ROUND(123.456, 2) FROM DUAL;
SELECT ROUND(123.456, -2) FROM DUAL;
FLOOR(숫자 | 숫자로 된 컬럼명) : 내림처리하는 함수
SELECT FLOOR(123.456) FROM DUAL;
SELECT FLOOR(123.678) FROM DUAL;
TRUNC(숫자 | 숫자로 된 컬럼명, [위치]) : 내림처리(절삭) 함수
SELECT TRUNC(123.456) FROM DUAL;
SELECT TRUNC(123.678) FROM DUAL;
SELECT TRUNC(123.456, 1) FROM DUAL;
SELECT TRUNC(123.456, 2) FROM DUAL;
SELECT TRUNC(123.456, -1) FROM DUAL;
CEIL(숫자 | 숫자로 된 컬럼명) : 올림 처리 함수
SELECT CEIL(123.456) FROM DUAL;
SELECT CEIL(123.678) FROM DUAL;
SELECT
ROUND(123.456)
, FLOOR(123.456)
, TRUNC(123.456)
, CEIL(123.456)
FROM DUAL;
날짜 처리 함수 : SYSDATE, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAT, EXTRACT
SYSDATE : 시스템에 저장되어 있는 날짜를 반환하는 함수
SELECT SYSDATE FROM DUAL;
MONTHS_BETWEEN(날짜, 날짜) : 두 날짜의 개월 수 차이를 숫자로 리턴하는 함수
SELECT
EMP_NAME
, HIRE_DATE
, CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE))
FROM EMPLOYEE;
ADD MONTHS(날짜, 숫자) : 날짜에 숫자만큼 개월 수 더해서 리턴
SELECT
ADD_MONTHS(SYSDATE, 5)
FROM DUAL;
EMPLOYEE 테이블에서 사원의 이름, 입사일, 입사 후 6개월이 되는 날짜 조회
SELECT
EMP_NAME
, HIRE_DATE
, ADD_MONTHS(HIRE_DATE, 6)
FROM EMPLOYEE;
EMPLOYEE 테이블에서 근무년수가 20년 이상인 직원의 모든 컬럼 조회
SELECT
*
FROM EMPLOYEE
-- WHERE ADD_MONTHS(HIRE_DATE, 240) <= SYSDATE;
WHERE MONTHS_BETWEEN(SYSDATE,HIRE_DATE) >= 240;
NEXT_DAY(기준날짜, 요일(문자 | 숫자) : 기준 날짜에서 구하려는 요일에 가장 가까운 날짜 리턴
SELECT SYSDATE, NEXT_DAY(SYSDATE, '목요일') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 5) FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '목') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'THURSDAY') FROM DUAL;
마지막줄 영어로는 조회가 불가하다.
ALTER SESSION SET NLS_LANGUAGE 에서 영어로 지정 후 조회가능
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'THURSDAY') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '목요일') FROM DUAL;
LAST_DAY(날짜) : 해당 월의 마지막 날짜를 구하여 리턴
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
EMPLOYEE 테이블에서 사원명, 입사일 - 오늘, 오늘 - 입사일 조회
SELECT
EMP_NAME
, CEIL(ABS(HIRE_DATE - SYSDATE)) "근무일수1"
, CEIL(SYSDATE - HIRE_DATE) "근무일수2"
FROM EMPLOYEE;
EMPLOYEE 테이블에서 사원명, 입사일, 입사한 월의 근무일수를 조회하세요
SELECT
EMP_NAME
, HIRE_DATE
, LAST_DAY(HIRE_DATE) - HIRE_DATE + 1 "입사월의 근무일수"
FROM EMPLOYEE;
EXTRACT(YEAR FROM 날짜) : 년도만 추출
EXTRACT(MONTH FROM 날짜) : 월만 추출
EXTRAC(DAY FROM 날짜) : 날짜만 추출
SELECT
EXTRACT(YEAR FROM SYSDATE) 년도
, EXTRACT(MONTH FROM SYSDATE) 월
, EXTRACT(DAY FROM SYSDATE) 일
FROM DUAL;
EMPLOYEE 테이블에서 이름, 입사년, 입사월, 입사일 조회
SELECT
EMP_NAME 사원이름
, EXTRACT(YEAR FROM HIRE_DATE) 입사년
, EXTRACT(MONTH FROM HIRE_DATE) 입사월
, EXTRACT(DAY FROM HIRE_DATE) 입사일
FROM EMPLOYEE
ORDER BY 오름차순 정렬 / DESC 뒤에 붙이면 내림차순
-- ORDER BY EMP_NAME ASC; --이름이 가나다순(오름차순)으로 정렬
-- ORDER BY EMP_NAME DESC; --이름이 내림차순으로 정렬
-- ORDER BY 사원이름;
-- ORDER BY 1;
EMPLOYEE 테이블에서 직원의 이름, 입사일, 근무년수를 조회
단, 근무년수는 현재년도 - 입사년도로 조회
SELECT
EMP_NAME
, HIRE_DATE
, EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
FROM EMPLOYEE;
MONTHS_BETWEEN으로 근무년수 조회
SELECT
EMP_NAME
, HIRE_DATE
, FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE) / 12) 근무년수
FROM EMPLOYEE;
형변환 함수
TO_CHAR(날짜, [포맷]) : 날짜형 데이터를 문자형 데이터로 변경
TO_CHAR(숫자, [포맷]) : 숫자형 데이터를 문자형 데이터로 변경
SELECT TO_CHAR(1234) FROM DUAL;
SELECT TO_CHAR(1234, '99999') FROM DUAL;
SELECT TO_CHAR(1234, '00000') FROM DUAL;
SELECT TO_CHAR(1234, 'L99999') FROM DUAL;
SELECT TO_CHAR(1234, '$99999') FROM DUAL;
SELECT TO_CHAR(1234, '00,000') FROM DUAL;
SELECT TO_CHAR(1234, '999') FROM DUAL;
직원 테이블에서 사원명, 급여 조회
급여는 '\9,000,000' 형식으로 표시하세요
SELECT
EMP_NAME
, TO_CHAR(SALARY, 'L99,999,999')
FROM EMPLOYEE;
날짜 데이터 포맷 적용 시에도 TO-CHAR 함수 사용
SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'MON, DY, YY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL; --2022-1-18 화요일
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') FROM DUAL; --2022-01-18 화요일
SELECT TO_CHAR(SYSDATE, 'YEAR, Q') || '분기' FROM DUAL; --TWENTY TWENTY-TWO, 1분기
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') 입사일
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일"') 입사일
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY/MM/DD HH24:MI:SS') 입사일
FROM EMPLOYEE;
오늘 날짜에 대해 년도 4자리, 년도 2자리, 년도 이름으로 출력
SELECT
TO_CHAR(SYSDATE, 'YYYY')
, TO_CHAR(SYSDATE, 'RRRR')
, TO_CHAR(SYSDATE, 'YY')
, TO_CHAR(SYSDATE, 'RR')
, TO_CHAR(SYSDATE, 'YEAR')
, TO_CHAR(SYSDATE, 'YEAR')
FROM DUAL;
RR과 YY의 차이
RR은 두 자리 년도를 네자리로 바꿀 때 바꿀 년도가 50년 미만이면 2000년을 적용하고
50년 이상이면 1900년을 적용한다.
YY는 년도를 바꿀 때 현재 세기(2000년)를 적용한다.
SELECT
TO_CHAR(TO_DATE('980630', 'YYMMDD'), 'YYYY-MM-DD')
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('980630', 'RRMMDD'), 'YYYY-MM-DD')
FROM DUAL;
오늘 날짜에서 월만 출력
SELECT
TO_CHAR(SYSDATE, 'MM')
, TO_CHAR(SYSDATE, 'MONTH')
, TO_CHAR(SYSDATE, 'MON')
, TO_CHAR(SYSDATE, 'RM') --로마자표기
FROM DUAL;
오늘 날짜에서 일만 출력
SELECT
TO_CHAR(SYSDATE, '"1년 기준 " DDD"일 째"')
, TO_CHAR(SYSDATE, '"달 기준 " DD"일 째"')
, TO_CHAR(SYSDATE, '"주 기준 " D "일 째"')
FROM DUAL;
오늘 날짜에서 분기와 요일 출력 처리
SELECT
TO_CHAR(SYSDATE, 'Q"분기"')
, TO_CHAR(SYSDATE, 'DAY')
, TO_CHAR(SYSDATE, 'DY')
FROM DUAL;
EMPLOYEE 테이블에서 이름, 입사일 조회
입사일 포맷은 '2018년 6월 15일 (수)' 형식으로 출력 처리 하세요
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY"년" fmMM"월" DD"일" "("DY")"') --RRRR도 가능
FROM EMPLOYEE;
TO_DATE : 문자 혹은 숫자형 데이터를 날짜형 데이터로 변환하여 리턴
TO_DATE(문자형데이터, [포맷])
TO_DATE(숫자형데이터, [포맷])
SELECT
TO_DATE('20100101', 'RRRRMMDD')
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('20100101', 'RRRRMMDD'), 'RRRR, MON')
FROM DUAL;
SELECT
TO_DATE('041030 143000', 'RRMMDD HH24MISS')
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('041030 143000', 'RRMMDD HH24MISS'), 'DD-MON-RR HH:MI:SS PM')
FROM DUAL;
EMPLOYEE 테이블에서 2000년도 이후에 입사한 사원의 사번, 이름, 입사일을 조회하세요
SELECT
EMP_ID
, EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
-- WHERE HIRE_DATE >= '20000101'; --자동 형변환됨(문자열은 날짜로 자동 형변환됨)
-- WHERE HIRE_DATE >= 20000101; --자동 형변환 안됨(숫자는 날짜로 자동 형변환 안됨)
WHERE HIRE_DATE >= TO_DATE(20000101, 'RRRRMMDD');
TO_NUMBER(문자데이터, [포맷]) : 문자 데이터를 숫자로 리턴
SELECT TO_NUMBER('123456789') FROM DUAL;
자동형변환
SELECT '123' + '456' FROM DUAL;
-- 숫자로 된 문자열만 가능하다
SELECT '123' + '456A' FROM DUAL; --에러발생
SELECT
EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE = '90/02/06'; -- 자동형변환
EMPLOYEE 테이블에서 사번이 홀수인 직원들의 정보 모두 조회
SELECT
*
FROM EMPLOYEE
WHERE MOD(EMP_ID, 2) = 1; -- 자동형변환
SELECT '1,000,000' + '500,000' FROM DUAL; -- 중간에 콤마 들어가서 안됨
정상 작동
SELECT
TO_NUMBER('1,000,000', '99,999,999') + TO_NUMBER('500,000', '999,999')
FROM DUAL;
직원 테이블에서 사원번호가 201인 사원의 이름, 주민번호 앞자리, 주민번호 뒷자리, 주민번호 앞자리와 뒷자리의 합을 조회하세요
단, 자동 형변환 사용하지 않고 조회
SELECT
EMP_NAME
, EMP_NO
, SUBSTR(EMP_NO, 1, 6) 앞부분
, SUBSTR(EMP_NO, 8) 뒷부분
, TO_NUMBER(SUBSTR(EMP_NO, 1, 6)) + TO_NUMBER(SUBSTR(EMP_NO, 8)) 결과
FROM EMPLOYEE
WHERE EMP_ID = TO_CHAR(201); --숫자 201이 아니라 문자 201
NULL 처리 함수
NVL(컬럼명, 컬럼값이 NULL일 때 바꿀 값)
SELECT
EMP_NAME
, BONUS
, NVL(BONUS, 0)
FROM EMPLOYEE;
NVL2(컬럼명, 바꿀값1, 바꿀값2)
해당 컬럼이 값이 있으면 바꿀 값 1로 변경,
해당 컬럼이 NULL이면 바꿀 값 2로 변경
직원 정보에서 보너스 포인트가 NULL인 직원은 0.5로
보너스 포인트가 NULL이 아닌 경우 0.7로 변경하여 조회
SELECT
EMP_NAME
, BONUS
, NVL2(BONUS, 0.7, 0.5)
FROM EMPLOYEE;
선택함수
여러 가지 경우에 선택할 수 있는 기능을 제공한다
DECODE(계산식 | 컬럼명, 조건값1, 선택값1, 조건값2, 선택값2...)
SELECT
EMP_ID
, EMP_NAME
, EMP_NO
, DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '2', '여')
FROM EMPLOYEE;
마지막 인자로 조건값 없이 선택값을 작성하면
아무것도 해당하지 않을 때 마지막에 작성한 선택 값을 무조건 선택한다
SELECT
EMP_ID
, EMP_NAME
, EMP_NO
, DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '여')
FROM EMPLOYEE;
직원의 급여를 인상하고자 한다.
직급코드가 J7인 직원은 급여의 10%를 인상하고
직급코드가 J6인 직원은 급여의 15%를 인상하고
직급코드가 J5인 직원은 급여의 20%를 인상한다.
그 외 직급의 직원은 5%만 인상한다.
직원 테이블에서 직원명, 직급코드, 급여, 인상급여(위 조건)을 조회하세요
SELECT
EMP_NAME
, JOB_CODE
, SALARY
, DECODE(JOB_CODE, 'J7', SALARY * 1.1,
'J6', SALARY * 1.15,
'J5', SALARY * 1.2,
SALARY * 1.05) 인상급여
FROM EMPLOYEE;
CASE
WHEN 조건식 THEN 결과값
WHEN 조건식 THEN 결과값
ELSE 결과값
END
SELECT
EMP_NAME
, JOB_CODE
, SALARY
, CASE
WHEN JOB_CODE = 'J7' THEN SALARY * 1.1
WHEN JOB_CODE = 'J6' THEN SALARY * 1.15
WHEN JOB_CODE = 'J5' THEN SALARY * 1.2
ELSE SALARY * 1.05
END AS 인상급여
FROM EMPLOYEE;
사번, 사원명, 급여를 EMPLOYEE 테이블에서 조회하고
급여가 500만원 초과이면 '고급'
300~500만원 사이이면 '중급'
그 이하는 '초급'을 출력 처리하고 별칭은 '구분'으로 한다.
SELECT
EMP_ID
, EMP_NAME
, SALARY
, CASE
WHEN SALARY > '5000000' THEN '고급'
WHEN SALARY > '3000000' THEN '중급'
ELSE '초급'
END AS 구분
FROM EMPLOYEE;
'TIL > Oracle(SQL)' 카테고리의 다른 글
[Oracle(SQL)] DML (INSERT, UPDATE, DELETE, TRUNCATE, MERGE) (0) | 2022.01.25 |
---|---|
[Oracle(SQL)] DDL(CREATE) (0) | 2022.01.25 |
[Oracle(SQL)] GROUP BY와 HAVING (0) | 2022.01.20 |
[Oracle(SQL)] SELECT 기본 문법 및 연산자 (0) | 2022.01.19 |
[SQL] Database 개요 (0) | 2022.01.14 |