< 문제 (FUNCTION) >
--(1) EMP Table에서 이름, 급여, 커미션 금액, 총액(sal+comm)을 구하여 총액이
-- 많은 순서로 출력하라. 단, 커미션이 NULL인 사람은 제외한다.
select ename 이름,sal 급여,comm "커미션 금액",sal+nvl(comm,0) 총액 |
--(2) 10번 부서의 모든 사람들에게 급여의 13%를 보너스로 지불하기로 하였다.
-- 이름, 급여, 보너스 금액, 부서 번호를 출력하라.
select ename 이름,sal 급여,(sal*0.13) "보너스 금액",deptno "부서 번호" |
--(3) 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라.
-- 단, 연말에 급여의 150%를 보너스로 지급한다.
select ename 이름, deptno 부서번호,sal 급여,((sal*12)+nvl(comm,0)+(sal*1.5)) 연봉 |
--(4) 부서 번호가 20인 부서의 시간당 임금을 계산하여 출력하라.
-- 단, 1달의 근무일수는 12일이고, 1일 근무시간은 5시간이다.
-- 출력양식은 이름, 급여, 시간당 임금(소수이하 1번째 자리에서 반올림)
-- 을 출력하라.
select ename 이름, sal 급여, round(((sal/12)/5),1) 임금 from emp where deptno = 20; |
--(5) 급여가 $1,500 부터 $3,000 사이의 사람은 급여의 15%를 회비로 지불하기로 하였다.
-- 이를 이름, 급여, 회비(-2자리에서 반올림)를 출력하라.
select ename 이름,sal 급여,round((sal*0.15),2) 회비 |
--(6) 급여가 $2,000 이상인 모든 사람은 급여의 15%를 경조비로 내기로 하였다.
-- 이름, 급여, 경조비(소수점 이하 절삭)를 출력하라.
select ename,sal,trunc(sal*0.15) 경조비 from emp where sal >= 2000; |
--(7) 입사일부터 지금까지의 날짜수를 출력하라.
-- 부서 번호, 이름, 입사일, 현재일, 근무일수(소수점 이하 절삭),
-- 근무년수(반올림),근무월수(30일 기준,반올림), 근무주수(반올림)를 출력하라.
select deptno,ename,hiredate,sysdate,trunc(sysdate-hiredate) 근무일수, round(months_between(sysdate,hiredate)/12,0) 근무년수, round(months_between(sysdate,hiredate)) 근무월수, round(months_between(sysdate,hiredate)/7,0) 근무주수 from emp; |
--(8) 모든 사원의 실수령액을 계산하여 출력하라.
-- 단, 급여가 많은 순으로 이름, 급여, 실수령액을 출력하라
-- (실수령액은 급여에 대해 10%의 세금을 뺀 금액)
select ename 이름,sal 급여,(sal*0.1)*12 실수령액 from emp order by 2 desc; |
--(9) 입사일로부터 90일이 지난 후의 사원 이름, 입사일, 90일 후의 날, 급여를 출력하라.
select ename 이름,hiredate 입사일,(hiredate+90) "90일 후의 날",sal 급여 from emp where sysdate-hiredate >= 90; |
--(10) 입사일로부터 6개월이 지난 후의 입사일, 6개월 후의 날짜, 급여를 출력하라.
select to_char(add_months(hiredate,6),'dd-day') 입사일, add_months(hiredate,6) "6개월후 날짜" from emp; |
--(11) 입사한 달의 근무일수를 계산하여 부서번호, 이름, 입사일, 근무일수를 출력하라.
select deptno,ename,hiredate,trunc(sysdate-hiredate) 근무일수 |
--(12) 모든 사원의 60일이 지난 후의 'MONDAY'는 몇 년, 몇 월, 몇 일 인가를 구하여
-- 이름, 입사일, 'MONDAY'를 출력하라.
select ename,hiredate,to_char(hiredate+60,'monday') |
--(13) 입사일로부터 오늘까지의 일수를 구하여 이름, 입사일, 근무일수(반올림)를
-- 출력하라.
select ename,hiredate,round((sysdate-hiredate+1),0) 근무일수 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; select * from emp; |
--(16) 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.
select trunc(avg(sal)),max(sal),min(sal),count(*) |
--(17) 각 부서별 급여의 평균, 최고, 최저, 인원수를 구하여 출력하라.
-- (부서번호도 출력)
select deptno 부서번호,trunc(avg(sal)) 평균,max(sal) 최고,min(sal) 최저,count(*) 인원 from emp |
--(18) 각 부서별 같은 업무를 하는 사람의 인원수를 구하여 부서번호, 업무명, 인원수를 출력하라.
select deptno 부서번호, job 업무명, count(*) 인원수 from emp group by deptno,job; |
--(19) 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.
select job 업무,count(*) |
--(20) 각 부서별 평균 월급, 전체 월급, 최고 월급, 최저 월급을 구하여 평균 월급이
-- 많은 순으로 출력하라. (부서번호도 출력)
select deptno 부서번호,trunc(avg(sal)) "평균 월급",sum(sal) "전체 월급", max(sal) "최고 월급",min(sal) "최저 월급" |
'Oracle DataBase > SQL' 카테고리의 다른 글
5day (0) | 2012.07.10 |
---|---|
4day (0) | 2012.07.10 |
3day (0) | 2012.07.05 |
문제1 (select) (0) | 2012.07.04 |
2day (0) | 2012.07.04 |