데이터 베이스 6장 연습문제
6장에 연습문제 풀기
--1번
--EMPNO열에는 EMP 테이블에서 사원 이름ENAME이 다섯 글자 이상이며 여섯 글자 미만인 사원 정보를 출력합니다. MASKING_EMPNO열에는
--사원번호 앞 두자리외 뒷자리를 * 기호로 출력합니다. 그리고 MASKING_ENAME열에는 사원 이름의 첫 글자만 보여주고 나머지 글자수만큼 * 기호로 출력하세요
SELECT EMPNO, SUBSTR(EMPNO,1,2) || '**' AS MASKING_EMPNO, ENAME,SUBSTR(ENAME,1,1) || '****' AS MASKING_ENAME
FROM EMP
WHERE LENGTH(ENAME)>=5 AND LENGTH(ENAME)<6;
--문제2
--EMP테이블에서 사원들의 월 평균 근무일 수는 21.5일입니다. 하루 근무 시간을 8시간으로 보았을 때
--사원들의 하루 급여와 시급을 계산하여 결과를 출력합니다.
--단 하루 급여는 소수점 세번째 자리에서 버리고 시급은 두 번째 소수점에서 반올림하세요.
SELECT EMPNO, ENAME, SAL, TRUNC(SAL/21.5,2) AS DAY_PAY, ROUND(SAL/21.5/8,1) AS TIME_PAY
FROM EMP;
--문제3
--EMP테이블에서 사원들은 입사일을 기준으로 3개월이 지난 후 첫 월요일에 정직원이 됩니다.
--사원들이 정직원이 되는 날짜를 YYYY-MM-DD형식으로 오른쪽과 같이 출력해주세요
--단 추가 수당이 없는 사원의 추가 수당은 N/A로 출력하세요
SELECT EMPNO, ENAME, TO_CHAR(HIREDATE,'YYYY-MM-DD'),
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE,3),2),'YYYY-MM-DD') AS R_JOB,
NVL2(COMM,TO_CHAR(COMM),'N/A')
FROM EMP;
--문제4
--EMP테이블의 모든 사원을 대상으로 직속 상관의 사원 번호를 다음과 같은 조건을 기준으로 변환해서 CHG_MGR열에 출력하세요.
--직속상관의 사원 번호가 존재하지 않을 경우:0000
--직속상관의 사원 번호 앞 두자리가 75일 경우 :5555
--직속상관의 사원 번호 앞 두자리가 76일 경우 :6666
--직속상관의 사원 번호 앞 두자리가 77일 경우 :7777
--직속상관의 사원 번호 앞 두자리가 78일 경우 :8888
--그 외 직속 상관 사원 번호의 경우: 본래 직속 상관의 사원 번호 그대로 출력
SELECT EMPNO, ENAME, MGR,
CASE WHEN SUBSTR(MGR,1,2) IS NULL THEN '0000'
WHEN SUBSTR(MGR,1,2)='75' THEN '5555'
WHEN SUBSTR(MGR,1,2)='76' THEN '6666'
WHEN SUBSTR(MGR,1,2)='77' THEN '7777'
WHEN SUBSTR(MGR,1,2)='78' THEN '8888'
ELSE TO_CHAR(MGR) END AS CHG_MGR
FROM EMP;
대체적으로 쉬움 CASE 와 DECODE문 좀 더 살펴 보기