과제1> 다음은 현재 날짜에서 2006/01/01을 뺀 결과를
출력해 보자.(TO_DATE)
결과> 1296
->SELECT SYSDATE, TRUNC(SYSDATE-TO_DATE('2006/01/01', 'YYYY/MM/DD')) FROM DUAL;
과제2> 다음 날짜와 시간을 출력해 보자.
결과>2009/07/20 10:19:05
->SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI/SS') FROM DUAL;
과제3> 다음은 sal을 6자리로 바꾸고 앞에 $를 붙여보자.
결과> smith $600
allen $1,600 등등
->SELECT ENAME, SAL, TO_CHAR(SAL, '$999,999') FROM EMP WHERE ENAME IN('SMITH', 'ALLEN');
1. 문제) EMP Table에서 이름, 급여, 커미션 금액, 총액(sal + comm)을 구하여 총액이 많은 순서로 출력하라. 단, 커미션이 NULL인
사람은 제외한다.
해답) SELECT ename, sal, comm, sal +comm Total
FROM emp
WHERE comm Is not null
ORDER BY total desc;
2. 문제) 10번 부서의 모든 사람들이게 급여의 13%를 보너스로 지불하기로 하였다. 이름, 급여, 보너스 금액, 부서번호를 출력하라.
해답) SELECT ename, sal, sal * 1.13, deptno
FROM emp
WHERE deptno = 10;
3. 문제) 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라. 단, 연말에 급여의 150%를 보너스로 지급한다.
해답) SELECT ename, deptno, sal, (sal*12)+(sal*1.5)
FROM emp
WHERE deptno = 30;
4. 문제)부서번호가 20인 부서의 시간당 임금을 계산하여 출력하라. 단, 1달의 근무일수는 12일이고, 1일 근무시간은 5시간이다.
출력양식은 이름, 급여, 시간당 임금(소수이하 첫 번째 자리에서 반올림)을 출력하라
해답) SELECT ename, sal, (sal/12)/5
FROM emp
WHERE deptno = 20;
5. 문제) 급여가 $1,500부터 $3,000 사이의 사람은 급여의 15%를 회비로 지불하기로 하였다. 이를 이름, 급여, 회비(소수점 두 자리에서 반올림)를 출력하라.
해답) SELECT ename, sal, round(salx0.15, -2)
FROM emp
WHERE sal >= 1500 and sal <= 3000;
6. 문제) 급여가 $2,000 이상인 모든 사람은 급여의 15%를 경조비로 내기로 하였다. 이름, 급여, 커미션(소수점 이하 절삭)를 출력하라.
해답) SELECT ename, sal, round(sal * 0.15, -2)
FROM emp
WHERE sal > 1500 and sal <= 3000;
7. 문제) 입사일부터 지금까지의 날짜수를 출력하라. 부서번호, 이름, 입사일, 현재일, 근무일수(소수점 이하 절삭), 근무년수, 근무월수(30일 기준), 근무주수를 출력하라.
SELECT DEPTNO, ENAME,
HIREDATE, <-- 입사일자
SYSDATE, <-- 현재일자
TRUNC(SYSDATE-HIREDATE), <-- 근무일수
TRUNC(SYSDATE-HIREDATE) / 365, <-- 근무년수
TRUNC(SYSDATE-HIREDATE) / 30, <-- 근무월수
TRUNC(SYSDATE-HIREDATE) / 7 <-- 근무주수
FROM EMP;
8. 문제) 모든 사원의 실수령액을 계산하여 출력하라. 단, 급여가 많은 순으로 이름, 급여, 실수령액을 출력하라.(실수령액은 금여에
대해 10%의 세금을 뺀 금액)
해답) SELECT ename, sal, (sal - (sal*0.10))
FROM emp
ORDER BY sal DESC;
9. 문제) 입사일로부터 90일이 지난 후의 사원이름, 입사일, 90일 후의 날, 급여를 출력하라.
해답) SELECT ENAME, HIREDATE, HIREDATE+90, SAL FROM EMP;
10. 문제) 입사일로부터 6개월이 지난 후의 입사일, 6개월 후의 날짜, 급여를 출력하라
해답) SELECT ENAME, HIREDATE, ADD_MONTHS(HIREDATE, 6), SAL FROM EMP;
11. 문제) 입사한 달의 근무일수를 계산하여 부서번호, 이름, 근무일수를 출력하라.
해답) SELECT DEPTNO, ENAME, LAST_DAY(HIREDATE) – HIREDATE FROM EMP;
12. 문제) 모든 사원의 60일이 지난 후의 ‘MONDAY’는 몇 년, 몇 월, 몇 일 인가를 구하여 이름, 입사일,’MONDAY’를 출력하라
해답) SELECT ENAME, HIREDATE, NEXT_DAY(HIREDATE+60, 'MONDAY') FROM EMP;
13. 문제) 입사일로부터 오늘까지의 일수를 구하여 이름, 입사일, 근무일수를 출력하라.
해답) SELECT ENAME, HIREDATE, (SYSDATE - HIREDATE) FROM EMP;
14. 문제) 입사일을 ‘1996년 5월 14일’의 형태로 이름, 입사일을 출력하라.
해답) SELECT ENAME, TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP;
15. 문제) 이름의 글자수가 6자 이상인 사람의 이름을 앞에서 3자만 구하여 소문자로 이름만을 출력하라.
해답) SELECT lower(substr(ename, 1, 3))
FROM emp WHERE length(ename) = 6;
16. 문제) 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.
해답) SELECT avg(sal), max(sal), min(sal), count(*)
FROM emp
WHERE deptno = 10;
17. 문제) 각 부서별 급여의 평균, 최고, 최저, 인언수를 구하여 출력하라.
해답) SELECT avg(sal), max(sal), min(sal), count(*)
FROM emp
GROUP BY deptno;
18. 문제) 각 부서별 같은 업무를 하는 사람의 인원수를 구하여 부서번호,업무명, 인원수를 출력하라.
해답) SELECT deptno, job, count(*)
FROM emp
GROUP BY deptno, job;
19. 문제) 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.
해답) SELECT JOB, COUNT(*)
FROM EMP
GROUP BY JOB
HAVING COUNT(*) > 4;
20. 문제) 각 부서별 평균 월급, 전체 월급, 최고 월급, 최저 월급을 구하여 평균 월급이 많은 순으로 출력하라.
해답) SELECT deptno, avg(sal), sum(sal), max(sal), min(sal)
FROM emp
GROUP BY deptno
ORDER BY avg(sal) DESC;
'Study > Oracle' 카테고리의 다른 글
[oracle] VIEW, 시퀀스, 인덱스, 데이터모델링 실습 (0) | 2019.05.13 |
---|---|
[oracle] VIEW, 시퀀스, 인덱스, 데이터모델링 (0) | 2019.05.13 |
[oracle] 무결성 제약조건, JOIN, 서브쿼리 실습 (0) | 2019.05.13 |
[oracle] 무결성 제약조건, JOIN, 서브쿼리 (0) | 2019.05.13 |
[oracle] SQL의 함수, DDL, 트랜잭션, 무결성 제약조건 (0) | 2019.05.13 |