[실습과제1]
1. BOSTON에 있는 부서의 이름은 무엇인가
select dname
from dept
where loc = 'boston';
2. 담당업무가 ANALYST인 사원의 이름, 입사일자를 보이시오
select ename, hiredate
from emp
where job='analyst';
3. 입사일자가 1981년 9월 1일 이후인 사원의 이름과 입사일자를 보이시오
select ename, hiredate
from emp
where hiredate>='1981-09-01';
4. 연봉이 3000에서 4000 사이인 사원의 이름, 연봉을 보이시오
select ename, sal
from emp
where sal between 3000 and 4000;
5. 사장의 이름을 보이시오 (힌트: 사장은 매니저가 없다)
select ename
from emp
where mgr is null;
6. 담당업무가 MANAGER가 아닌 사원들의 이름, 담당업무를 보이시오
select ename, job
from emp
where job <> 'manager';
7. 담당업무가 CLERK, ANALYST, SALESMAN인 사원들의 이름, 담당업무, 급여를 보이시오
select ename, job, sal
from emp
where job in ('clerk', 'analyst', 'salesman');
8. 연봉이 3000에서 4000 사이 이거나 담당업무가 MANAGER인 사원의 이름, 연봉을 보이시오
select ename, sal
from emp
where (sal between 3000 and 4000)
or (job = 'manager');
9. 보너스를 받는 사원들의 이름과 보너스 금액을 보이시오
select ename, comm
from emp
where comm is not null;
10. 부서번호가 20인 사원 중에서 담당업무가 CLERK이고 매니저의 사원번호가 7902인 사람의 이름을 보이시오
select ename
from emp
where deptno = 20
and job = 'clerk'
and mgr = 7902;
[실습과제2]
1. 담당업무가 CLERK인 사원은 모두 몇 명인가
select count(*)
from emp
where job = 'clerk';
2. 담당업무가 CLERK인 사원의 최고 연봉 금액과 최저 연봉금액, 그리고 두 금액의 차이 금액을 보이시오
select max(sal), min(sal), max(sal)-min(sal)
from emp
where job='clerk';
3. 입사일이 1981년 9월 1일 이후인 사원의 평균 연봉을 보이시오
select avg(sal)
from emp
where hiredate>='1981-09-01';
4. 매니저의 사원번호가 7698, 7639, 7782이 아닌 사원의 이름, 담당업무를 보이시오
select ename, job
from emp
where mgr not in (7698, 7639, 7782);
위 코드의 경우 사장이 빠지게 되므로 아래의 코드와 같이 작성해야 한다.
select ename, job
from emp
where mgr not in (7698, 7639, 7782) or mgr is null;
5. 1982년도와 1983년도에 입사한 사원의 이름, 입사일자를 보이시오
select ename, hiredate
from emp
where hiredate between '1982-01-01' and '1983-12-31';
6. 담당업무 이름에 NA를 포함하고 있는 사원의 이름, 담당업무를 보이시오
select ename, job
from emp
where job like '%NA%';
7. 보너스를 받는 사원의 이름과 보너스와 연봉을 합한 금액을 보이시오
select ename, sal+comm
from emp
where comm is not null;
8. 모든 사원의 연봉을 10% 올려주려면 현재보다 돈이 얼마나 더 있어야 하는지 보이시오
select sum(sal*1.1)-sum(sal)
from emp;
select sum(sal*0.1)
from emp;
[실습과제3]
1. 모든 사원들의 이름을 알파벳 역순으로 보이시오
select ename
from emp
order by ename desc;
2. 모든 담당업무명을 알파벳 순으로 보이시오
select distinct job
from emp
order by ename;
3. 모든 사원의 이름과 업무, 급여를 급여 순으로 보이시오
select ename, job, sal
from emp
order by sal;
4. 모든 사원의 이름과 부서번호를 입사일자순으로 보이시오
select ename, deptno
from emp
order by hiredate;
5. 모든 사원의 사원번호, 이름, 급여를 부서번호순으로 보이시오
select empno, ename, sal
from emp
order by deptno;
6. 담당 업무별 평균 연봉을 보이시오
select job, avg(sal)
from emp
group by job;
7. 부서별 평균 연봉을 보이되 많은 연봉 우선으로 보이시오
select deptno, avg(sal)
from emp
group by deptno
order by avg(sal) desc;
8. 각 부서별 최고 연봉을 보이시오
select deptno, max(sal)
from emp
group by deptno;
9. 모든 사원의 정보를 담당업무에 대해 오름차순으로, 그리고 같은 업무 내에서는 연봉 내림차순으로 정렬하여 보이시오
select *
from emp
order by job, sal desc;
10. 각 매니저별 담당 사원의 인원수, 평균 연봉을 보이시오
select mgr, count(*), avg(sal)
from emp
group by mgr;
위의 코드와 같이 작성할 수도 있으나, mgr이 null인 행이 포함되므로 아래의 코드가 바람직하다.
select mgr, count(*), avg(sal)
from emp
where mgr is not null
group by mgr;
11. 각 담당업무별로 최고 연봉과 최저 연봉을 보이시오
select job, max(sal), min(sal)
from emp
group by job;
12. 담당업무별 인원수, 평균연봉을 보이되 업무별 인원수가 3명 이상인 경우에 대해서만 보이시오
select job, count(*), avg(sal)
from emp
group by job
having count(*) >= 3;
13. 각 부서별 부서번호, 사원수, 연봉 합계를 보이시오
select deptno, count(*), sum(sal)
from emp
group by deptno;
14. 각 부서별 부서번호, 사원수, 연봉 합계를 보이되 사원수가 3명 이상인 부서의 정보만 보이시오
select deptno, count(*), sum(sal)
from emp
group by deptno
having count(*) >= 3;
15. 부서번호, 부서별 사원수, 연봉 합계를 보이되 급여 합계가 9000~10000 사이인 경우만 보이시오. 단, 입사일자가 1981-01-01 이전 사원은 제외하고, 연봉 합계가 많은 순으로 출력하시오.
select deptno, count(*), sum(sal)
from emp
where hiredate > '1981-01-01'
group by deptno
having sum(sal) between 9000 and 10000
order by sum(sal) desc;