<내가 풀이한>
<그룹함수 문제&답안>
1. EMP테이블에서 모든 SALESMAN에 대하여 급여의 평균, 최고액, 최저액, 합계를 구하여 출력하라.
set linesize 120
/
select avg(sal), max(sal), min(sal), sum(sal)
from emp
where job='SALESMAN';
2. EMP 테이블에 등록되어 있는
인원수, COMM의 합계, 전체 사원의 COMM 평균, 등록되어 있는 부서의 수를 구하여 출력하라.
select count(*) 인원수, sum(comm) COMM합계, avg(nvl(comm,0)) COMM평균, count(distinct deptno) 부서수
from emp;
3. 부서별로 인원수, 평균급여, 최저 급여, 최고 급여를 구하여라.
select deptno 부서, count(*) 인원수, avg(sal) 평균급여, min(sal) 최저급여, max(sal) 최고급여
from emp
group by deptno;
4. 3번 문제에서 최대 급여가 3000 이상인 부서별로 출력하라.
select deptno 부서, count(*) 인원수, avg(sal) 평균급여, min(sal) 최저급여, max(sal) 최고급여
from emp
group by deptno
having max(sal)>=3000;
5. 10번과 30번 부서에서 업무별 최소급여가 1500 이하인 업무와 최소급여를 출력하라.
select job 업무, min(sal) 최소급여
from emp
where deptno=10 or deptno=30
group by job
having min(sal)<=1500;
6. 부서별 인원이 4명 이상인 부서별 인원수, 급여의 합을 출력하라.
select count(*) 인원수, sum(sal) 급여합
from emp
group by deptno
having count(deptno)>=4;
7. 전체 급여가 5000을 초과하는 각 업무에 대해 업무와 급여 합계를 출력하라.
단, SALESMAN은 제외하고 급여 합계를 내림차순으로 정렬하라.
select job, sum(sal)
from emp
where job!='SALESMAN'
group by job
having sum(sal)>5000
order by sum(sal) desc;
8. 부서별 평균 중 최대평균급여,
부서별 급여의 합 중 최대급여,
전체 급여에서 최소 급여,
전체 급여 에서 최대 급여를 출력하라.
select
max(avg(sal)),
max(sum(sal)),
min(min(sal)),
max(max(sal))
from emp
group by deptno;
9. 부서별 업무별 급여의 평균을 출력하는 SELECT문장을 작성하라. (세자리 구분기호)
JOB DEPTNO10 DEPTNO 20 DEPTNO 30 TOTAL
ANALYST 3,000 3,000
CLERK 1,300 950 950 1,038
MANAGER 2,450 2,975 2,850 2,758
PRESIDENT 5,000 5,000
SALESMAN 1,400 1,400
select job,
to_char(avg(decode(deptno,10,sal)),'9,990') "DEPTNO 10",
to_char(avg(decode(deptno,20,sal)),'9,990') "DEPTNO 20",
to_char(avg(decode(deptno,30,sal)),'9,990') "DEPTNO 30",
to_char(avg(sal),'9,990') "TOTAL"
from emp
group by job
order by 1 asc;
10. 급여가 1000 이하인 인원수,
1001에서 2000 사이의 인원수,
2001에서 3000 사이의 인원수,
3000 초과인 인원수를 출력하시오.
3000 초과 3000~2001 2000~1001 1000 이하
select count(case when sal<=1000 then 1 end) "1000이하",
count(case when sal>=1001 and sal<=2000 then 1 end) "1001~2000",
count(case when sal>=2001 and sal<=3000 then 1 end) "2001~3000",
count(case when sal>3000 then 1 end) "3000초과"
from emp;
11. 부서별 급여평균과 업무별 급여평균과 매니저별 급여 평균을 출력. (Grouping sets를 이용)
select deptno, job, mgr, avg(sal)
from emp
group by grouping sets(deptno, job, mgr)
order by deptno;
12. 부서와 업무의 그룹별 인원 수와
부서와 매니저의 그룹별 인원수를 함께 출력. (Grouping sets 이용)
select deptno, job, mgr, count(*)
from emp
group by grouping sets((deptno,job), (deptno,mgr))
order by deptno;
13. 업무와 부서별 급여의 합과 평균을 출력하고
업무별 급여 합과 평균을 함께 출력(Grouping sets 이용)
select deptno, job, sum(sal), avg(sal)
from emp
group by grouping sets((job, deptno), job)
order by deptno;
14. 전체합계, 부서별 합계, 업무별 합계,업무별 부서별 합계 순서로 출력하라.
select sum(sal), deptno, job
from emp
group by cube(deptno, job)
order by grouping(job) desc, grouping(deptno) desc;
15. 부서별 매니저별 합계, 부서별 합계, 전체 합계 순서로 출력하라.
select
deptno,
sum(decode(job,'MANAGER',sal)) "매니저급여합",
sum(sal) "전체합"
from emp
group by deptno, rollup(job)
order by deptno;
또는
select deptno, mgr, sum(sal),
grouping(mgr) 부서별, grouping(deptno) 전체합계 from emp
group by rollup(deptno,(deptno,mgr));
16. 직위가 동일한 사람의 수를 표시하는 질의를 작성한다.
select job, count(*)
from emp
group by job
order by 2;
17. 관리자 목록 없이 관리자 수만 표시하고
열 이름을 Number Of Managers로 지정한다.
select count(distinct mgr) "Number Of Managers"
from emp;
----------------------------------------------------
<선생님이 정리해주신>
<그룹함수 문제&답안>
1.EMP테이블에서 모든 SALESMAN에 대하여 급여의 평균, 최고액, 최저액, 합계를 구하여 출력하라.
select avg(sal) 급여평균, max(sal) 최고액, min(sal) 최저액, sum(sal) 합계 from emp where job='SALESMAN';
2.EMP 테이블에 등록되어 있는 인원수,COMM의 합계,전체 사원의 COMM 평균, 등록되어 있는 부서의 수를 구하여 출력하라.
select count(*) 인원수, sum(comm) COMM합계, avg(nvl(comm,0)) COMM평균, count(distinct deptno) 등록된부서수 from emp;
3.부서별로 인원수, 평균급여, 최저 급여, 최고 급여를 구하여라.
select deptno 부서번호, count(*) "인원수", avg(sal) "평균급여", min(sal) "최저급여", max(sal) "최고급여" from emp group by deptno;
4.3번 문제에서 최대 급여가 3000 이상인 부서별로 출력하라.
select deptno 부서번호, count(*) "인원수", avg(sal) "평균급여", min(sal) "최저급여", max(sal) "최고급여"
from emp group by deptno having max(sal)>=3000;
5.10번과 30번 부서에서 업무별 최소급여가 1500 이하인 업무와 최소급여를 출력하라.
select deptno "부서번호", job "업무", min(sal) "최소급여" from emp
where deptno=10 or deptno=30 group by deptno,job having min(sal)<=1500;
6.부서별 인원이 4명 이상인 부서별 인원수, 급여의 합을 출력하라.
select deptno "부서번호", count(*) "인원수", sum(sal) "급여합" from emp group by deptno having count(*)>=4;
7.전체 급여가 5000을 초과하는 각 업무에 대해 업무와 급여 합계를 출력하라. 단, SALESMAN은 제외하고 급여 합계를 내림차순으로 정렬하라.
select job "업무", sum(sal) "급여합계" from emp where job!='SALESMAN' group by job having sum(sal)>5000 order by 2 desc;
8.부서별 평균 중 최대평균급여, 부서별 급여의 합 중 최대급여, 전체 급여에서 최소 급여, 전체 급여 에서 최대 급여를 출력하라.
select max(avg(sal)) "최대평균급여", max(sum(sal)) "최대급여합", min(min(sal)) "최소급여", max(max(sal)) "최대급여" from emp group by deptno;
9.부서별 업무별 급여의 평균을 출력하는 SELECT문장을 작성하라. (세자리 구분기호)
select job "JOB", to_char(sum(decode(deptno,10,sal,0)),'99,999') deptno10, to_char(sum(decode(deptno,20,sal,0)),'99,999') deptno20, to_char(sum(decode(deptno,30,sal,0)),'99,999') deptno30, to_char(sum(sal),'9,999') "TOTAL" from emp
group by job;
10.급여가 1000 이하인 인원수,1001에서 2000 사이의 인원수,2001에서 3000 사이의 인원수,3000 초과인 인원수를 출력하시오.
select count(case when sal>3000 then 1 end) "3000초과", count(case when sal>2000 and sal<=3000 then 1 end) "3000~2001", count(case when sal>1000 and sal<=2000 then 1 end) "2000~1001", count(case when sal<=1000 then 1 end) "1000이하" from emp;
11. 부서별 급여평균과 업무별 급여평균과 매니저별 급여 평균을 출력.(Grouping sets를 이용)
select deptno, job, mgr, avg(sal) from emp
group by grouping sets((deptno), (job), (mgr));
12. 부서와 업무의 그룹별 인원 수와 부서와 매니저의 그룹별 인원수를 함께 출력.(Grouping sets 이용)
select deptno, job, mgr, count(*) from emp
group by grouping sets((deptno, job), (deptno, mgr));
13.업무와 부서별 급여의 합과 평균을 출력하고 업무별 급여 합과 평균을 함께 출력(Grouping sets 이용)
select job "업무", deptno "부서번호", sum(sal) "급여합", avg(sal) "급여평균" from emp group by grouping sets((job,deptno),job);
14.전체합계, 부서별 합계, 업무별 합계,업무별 부서별 합계 순서로 출력하라.
select deptno, job, sum(sal) from emp group by cube(deptno, job)
order by grouping(job) desc, grouping(deptno) desc;
15.부서별 매니저 별 합계, 부서별 합계, 전체 합계 순서로 출력하라.
select deptno, mgr, sum(sal), grouping(mgr) 부서별, grouping(deptno) 전체합계 from emp group by rollup(deptno,(deptno,mgr));
16.직위가 동일한 사람의 수를 표시하는 질의를 작성한다.
select job, count(*) from emp group by job;
17.관리자 목록 없이 관리자 수만 표시하고 열 이름을 Number Of Managers로 지정한다.
select count(distinct mgr) "Number Of Managers" from emp;
----------------------------------------------------
<선생님이 정리해주신>
<조인>
*** 조인(Join)
-- SQL명령에서 사용하는 컬럼이 하나 이상*의 테이블에 존재하는 경우 사용하는 고급쿼리 기법(32개까지 가능)
-- 종류
1. Eque join(inner join) : 조건에 만족하는 행만* 추출
2. Outer join(left & right) : 조건에 만족하는 행이 추출되고, 마스터 테이블의 모든 행이 함께 추출되는 조인
3. Cross join(데카르트의 곱) : 카티션 프로덕트, table*table, 경우의 수 추출, 조건이 없음
----------------------
4. Self join : 물리적으로 자기 자신의 테이블과 조인되는 경우
-- 문법
1. T-SQL 문법 : from절에 테이블 나열형, where절이 조건절
----------------------------
1) 컬럼을 원하는 곳에서 사용
2) 사용된 컬럼을 가진 테이블 목록을 from~(, 구분자) 나열
3) 사용된 테이블간의 관계(PK<-FK)를 조건식으로 표현
----------------------------
2. Ansi 문법 : 사용되는 테이블을 서술형으로 표현, on 조건절
* 관계되는 컬럼명이 같은 경우에만 사용! : 테이블 별칭 불가!, (+)기호 불가!
-natural join
select saname, deptno, dname from sawon natural join dept;
-using join
select saname, deptno, dname from sawon join dept using(deptno);
-- 사원명, 부서번호, 부서명을 추출
select s.saname, s.deptno, d.dname from sawon s, dept d
where s.deptno = d.deptno;
select s.saname, s.deptno, d.dname from sawon s join dept d
on(s.deptno = d.deptno);
--고객명, 전화번호, 담당사원명을 추출. 단, 담당자가 없는 고객도 추출
select g.goname, g.gotel, s.saname
from gogek g, sawon s
where g.godam = s.sabun(+); -- left outer join
select g.goname, g.gotel, s.saname
from gogek g left outer join sawon s on(g.godam = s.sabun);
select s.saname, m.saname from sawon s, sawon m
where s.samgr = m.sabun(+);
--부서(명)별 급여합계를 추출
select d.dname,sum(s.sapay) from sawon s , dept d
where d.deptno = s.deptno(+)
group by d.dname;
--부서명, 사원명, 직책, 관리자명, 관리자직책을 추출(단, 관리자가 없는 사원도 추출)
select d.dname, s.saname, s.sajob, m.saname, m.sajob
from dept d, sawon s, sawon m
where s.deptno = d.deptno(+)
and s.samgr = m.sabun(+);
--고객명, 전화, 담당자명, 직책, 부서명을 추출(단, 담당자가 없는 고객도 추출)
select g.goname 고객명, g.gotel 고객전화, s.saname 담당자명, s.sajob 직책, d.dname 부서명
from dept d, sawon s, gogek g
where g.godam=s.sabun(+)
and s.deptno=d.deptno(+);
select g.goname 고객명, g.gotel 고객전화, s.saname 담당자명, s.sajob 직책, d.dname 부서명
from gogek g left outer join s on(g.godam=s.sabun)
left outer join d on(s.deptno=d.deptno);
--직책별 부서별 급여합계를 추출
직책 영업부 관리부 전산부 총무부 급여합계
-----------------------------------------------------------
과장
대리
사원
부장
select sa.sajob "직책",
sum(case de.dname when '총무부' then sa.sapay else 0 end) "총무부" ,
sum(case de.dname when '영업부' then sa.sapay else 0 end) "영업부" ,
sum(case de.dname when '전산부' then sa.sapay else 0 end) "전산부" ,
sum(case de.dname when '관리부' then sa.sapay else 0 end) "관리부",
sum(sapay) "급여합계"
from sawon sa , dept de
where sa.deptno = de.deptno
group by rollup(sajob);
-- 이순신보다 급여를 많이 받는 사람을 추출
select s2.saname, s2.sapay from sawon s1, sawon s2
where s1.saname='이순신
and s1.sapay < s2.sapay;
--------------------------------------------------------------------------
// 연습문제
1. 사원명, 부서번호, 부서명을 추출
select s.saname, s.deptno, d.dname from sawon s, dept d
where s.deptno=d.deptno;
2. 고객명, 전화번호, 담당사원명을 추출
select g.goname, g.gotel, s.saname
from gogek g, sawon s
where g.godam=s.sabun;
3. 고객명, 전화번호, 담당사원명을 추출. 단, 담당자가 없는 고객도 추출
select g.goname, g.gotel, s.saname
from gogek g, sawon s
where g.godam=s.sabun(+); -- left outer join
4. 사원명, 관리자명(상사)을 추출
select s.saname, m. saname
from sawon s, sawon m
where s.samgr=m.sabun;
5. 사원명, 관리자명(상사)을 추출, 단, 관리자가 없는 사원도 추출.
select s.saname, m.saname
from sawon s, sawon m
where s.samgr=m.sabun(+);
6. 부서(명)별 급여합계를 추출
select dname "부서명", sum(sapay) "급여합"
from sawon s, dept d
where s.deptno=d.deptno
group by d.dname;
7. 부서명, 사원명, 직책, 관리자명, 관리자직책을 추출 (단, 관리자가 없는 사원도 추출)
select d.dname "부서명", s.saname "사원명", s.sajob "직책", m.saname "관리자명", m.sajob "관리자직책"
from sawon s, sawon m, dept d
where s.samgr=m.sabun(+) and s.deptno=d.deptno(+);
8. 고객명, 전화, 담당자명, 직책, 부서명을 추출 (단, 담당자가 없는 고객도 추출)
select g.goname "고객명", g.gotel "전화", s.saname "담당자", s.sajob "직책", d.dname "부서"
from gogek g, sawon s, dept d
where g.godam=s.sabun(+) and s.deptno=d.deptno(+);
9. 직책별 부서별 급여합계를 추출
select
s.sajob "직책",
sum(case d.dname when '총무부' then s.sapay else 0 end) "총무부",
sum(case d.dname when '영업부' then s.sapay else 0 end) "영업부",
sum(case d.dname when '전산부' then s.sapay else 0 end) "전산부",
sum(case d.dname when '관리부' then s.sapay else 0 end) "관리부",
sum(sapay) "급여합계"
from sawon s, dept d
where s.deptno=d.deptno
group by rollup(s.sajob);
10 이순신 보다 급여를 많이 받는 사람 (셀프조인 이용)
select a.saname, a.sapay
from sawon a, sawon b
where b.saname='이순신' and a.sapay>b.sapay;
--------------------------------------------------------------------------
<내가 풀이한>
<조인 문제&답안>
1. EMP 테이블과 DEPT 테이블을 CARTESIAN PRODUCT(모든 가능한 행들의 join)로
사원번호,이름,업무,부서번호,부서명,근무지를 출력하라.
select e.empno, e.ename, e.job, d.deptno, d.dname, d.loc
from emp e
cross join dept d;
2. EMP 테이블에서 사원번호, 이름, 업무, 부서번호, 부서명, 근무지 출력하라.
단, 사원이 없는 부서의 부서번호도 출력하라.
select e.empno, e.ename, e.job, e.deptno, d.dname, d.loc
from emp e, dept d
where e.deptno(+)=d.deptno;
3. SALESMAN의 사원번호,이름,급여,부서명,근무지를 출력하라.
select e.deptno, e.ename, e.sal, d.dname, d.loc
from emp e, dept d
where e.deptno=d.deptno and e.job='SALESMAN';
4. 사원번호, 이름, 업무, 급여, 급여의 등급(salgrade), 하한값, 상한값을 출력하라.
select e.empno, e.ename, e.job, e.sal, g.grade, g.losal, g.hisal
from emp e, salgrade g
where e.sal>=g.losal and e.sal<=g.hisal;
5. EMP 테이블에서 SELF JOIN으로 상사를 출력하라.
사원번호(EMPNO), 사원명(ENAME), 상사번호(MGR_NO), 상사명(MGR_NAME),
상사가 없는 사람도 출력하라.
select e.empno, e.ename, e.mgr, m.ename "상사명"
from emp e, emp m
where e.ename=m.ename(+);
6. 상사가 7698인 사원의 이름, 사원번호, 상사번호, 상사명을 출력하라.
select e.ename "사원이름", e.empno "사원번호", e.mgr "상사번호", m.ename "상사명"
from emp e, emp m
where e.mgr=m.empno(+) and e.mgr=7698;
7. NEW YORK에서 근무하고 있는 사원에 대해 이름, 업무, 급여, 부서명을 출력
select e.ename, e.job, e.sal, d.dname, d.loc
from emp e, dept d
where e.deptno=d.deptno and d.loc='NEW YORK';
8. 보너스를 받는 사원에 대해 이름, 업무, 급여, 부서명을 출력
select e.ename, e.job, e.sal, e.comm, d.dname
from emp e, dept d
where e.deptno=d.deptno and e.comm is not null and e.comm>0;
9. 이름 중 L자를 가진 사원에 대해 이름, 업무, 부서명, 부서 위치를 출력
select e.ename, e.job, d.dname, d.loc
from emp e, dept d
where e.deptno=d.deptno and e.ename like '%L%';
10. 사원번호, 이름, 업무, 부서번호, 부서명, 위치, 급여, 급여 등급을 출력하라.
select e.empno, e.ename, e.job, e.deptno, d.dname, d.loc, e.sal, g.grade
from emp e, dept d, salgrade g
where e.deptno=d.deptno and e.sal>=g.losal and e.sal<=g.hisal;
11. SALES 부서에서 근무하는 사원번호, 이름, 부서번호, 부서명, 근무지역을 출력
select e.empno, e.ename, e.deptno, d.dname, d.loc
from emp e , dept d
where e.deptno=d.deptno and d.dname='SALES';
12. 업무가 MANAGER이거나 CLERK인 사원의 사원번호, 이름, 급여, 업무, 부서명, 급여등급을 출력하라.
select e.empno, e.ename, e.sal, e.job, d.dname, g.grade
from emp e, dept d, salgrade g
where e.deptno=d.deptno
and e.job='MANAGER' or e.job='CLERK'
and e.sal>=g.losal and e.sal<=g.hisal;
13. 사원번호, 사원이름, 사원급여, 상사번호, 상사 이름, 상사의 업무를 출력하라.
상사가 없는 사람도 출력하라.
select e.empno, e.ename, e.sal, e.mgr, m.empno "상사번호", m.ename "상사이름", m.job "상사업무"
from emp e, emp m
where e.mgr=m.empno(+);
14. EMP 테이블에서
그들의 상사보다 먼저 입사한 사원에 대해
사원이름, 사원의 입사일, 상사 이름, 상사 입사일을 출력
select e.ename "사원이름", e.hiredate "사원입사일", m.ename "상사이름", m.hiredate "상사입사일"
from emp e, emp m
where e.mgr=m.empno(+) and e.hiredate
15. 아래와 같이 사원의 급여와 사원의 급여만큼 ‘*’를 출력하라,
* 하나는 100을 의미한다.
ENAME DNAME SAL/100 STAR
ADAMS RESEARCH 11 ***********
ALLEN SALES 16 ****************
……
set linesize 120
/
col star format a55
/
select e.ename, d.dname, e.sal/100 "SAL/100", lpad('*', e.sal/100, '*') "STAR"
from emp e, dept d
where e.deptno=d.deptno;
16. 사원 테이블명을 E, 상사 테이블명을 M으로 할 때
사원번호(E.EMPNO), 사원 이름, 사원 급여, 사원 급여등급,
상사번호(M.EMPNO), 상사 이름, 상사 급여, 상사 급여 등급을 출력하라.
단, 상사(M) 테이블에서 부하직원이 없는 사람도 출력하라
select
e.empno, e.ename, e.sal, s.grade,
m.empno, m.ename, m.sal, ms.grade
from emp e, emp m, salgrade s, salgrade ms
where (e.mgr=m.empno(+))
and (e.sal>=s.losal and e.sal<=s.hisal)
and (m.sal>=ms.losal and m.sal<=ms.hisal);
17. 사원번호, 사원 이름, 사원의 급여, 사원급여 등급,
상사번호, 상사 부서번호, 상사의 부서명을 출력하라.
단, 상사가 없는 사람도 출력하라.
select
e.empno "사원번호", e.ename "사원이름", e.sal "사원급여", g.grade "사원등급",
m.empno "상사번호", m.deptno "상사부서번호", d.dname "상사부서명"
from emp e, emp m, salgrade g, dept d
where e.mgr=m.empno(+) and m.deptno=d.deptno
and e.sal>=g.losal and e.sal<=g.hisal;
18. 사원 번호, 사원 이름, 사원의 부서번호, 사원의 부서명,
상사 이름, 상사 부서번호, 상사의 근무지역을 출력하라.
단, 사원 테이블의 상사가 없는 사람도 출력하고,
사원이 존재하지 않는 부서번호와 부서명도 출력하라.
select
e.empno "사원번호", e.ename "사원이름", e.deptno "사원부서번호", d.dname "사원부서이름",
m.ename "상사이름", m.deptno "상사부서번호", d.loc "상사근무지역"
from emp e, dept d, emp m
where e.mgr=m.empno(+) and e.deptno=m.deptno(+);
----------------------------------------------------
<선생님이 정리해주신>
<조인 문제&답안>
JOIN의 실습예제(SCOTT)
1. EMP 테이블과 DEPT 테이블을 CARTESIAN PRODUCT로 사원번호,이름,업무,부서번호,부서명,근무지를 출력하라.
select empno,ename,job,DEPT.DEPTNO,DEPT.DNAME,DEPT.LOC from emp cross join dept;
2. EMP 테이블에서 사원번호, 이름 ,업무, 부서번호,부서명,근무지 출력하라. 단, 사원이 없는 부서의 부서번호도 출력하라.
select empno,ename,job,d.deptno,d.dname,d.loc from emp e,dept d
where e.deptno(+)=D.DEPTNO;
3. SALESMAN의 사원번호,이름,급여,부서명,근무지를 출력하라.
select empno,ename,sal,d.dname,d.loc from emp e, dept d
where E.DEPTNO=D.DEPTNO and e.job='SALESMAN';
4. 사원번호,이름,업무,급여,급여의 등급,하한 값,상한 값을 출력하라.
select e.empno,e.ename,e.job, e.sal, s.grade,s.losal,s.hisal from emp e, salgrade s
where e.sal>=s.losal and e.sal<=s.hisal;
5. EMP 테이블에서 SELF JOIN으로 상사를 출력하라. 사원번호(EMPNO), 사원명(ENAME),상사 번호(MGR_NO),상사명(MGR_NAME) , 상사가 없는 사람도 출력하라.
select e.empno,e.ename,e.MGR,m.ename from emp e,emp m
where E.MGR=M.EMPNO(+);
6. 상사가 7698인 사원의 이름, 사원번호, 상사번호, 상사명을 출력하라.
select e.ename,e.MGR,m.ename from emp e,emp m
where E.MGR=M.EMPNO and e.mgr=7698;
7. NEW YORK에서 근무하고 있는 사원에 대해 이름, 업무, 급여, 부서명을 출력
select empno,job,sal,d.deptno from emp e,dept d
where e.deptno=d.deptno and d.loc='NEW YORK';
8. 보너스를 받는 사원에 대해 이름, 업무, 급여, 부서명을 출력
select ename,job,sal,d.dname from emp e,dept d
where e.deptno=d.deptno and e.comm is not null;
9. 이름 중 L자를 가진 사원에 대해 이름, 업무, 부서명, 부서 위치를 출력
select ename,job,d.dname,d.loc from emp e, dept d
where e.deptno=d.deptno and e.ename like '%L%';
10. 사원번호, 이름, 업무, 부서번호, 부서명, 위치, 급여, 급여 등급을 출력하라.
select empno,ename,job,d.deptno,d.dname,d.loc,sal,s.grade from emp e,dept d, salgrade s
where e.deptno=d.deptno and e.sal>=s.losal and e.sal<=s.hisal;
11. SALES 부서에서 근무하는 사원번호, 이름, 부서번호, 부서명, 근무지역을 출력
select empno,ename,e.deptno,d.dname,d.loc from emp e, dept d
where E.DEPTNO=D.DEPTNO and d.dname='SALES';
12. 업무가 MANAGER이거나 CLERK인 사원의 사원번호, 이름, 급여, 업무, 부서명, 급여등급을 출력하라.
select empno,ename,sal,job,d.dname,s.grade from emp e,dept d, salgrade s
where e.deptno=d.deptno and e.sal>=s.losal and e.sal<=s.hisal and (e.job='MANAGER' OR E.JOB='CLERK');
13. 사원번호, 사원이름, 사원급여, 상사번호, 상사 이름, 상사의 업무를 출력하라. 상사가 없는 사람도 출력하라.
select e.empno,e.ename,e.sal,e.mgr,m.job from emp e,emp m
where e.mgr=m.empno(+);
14. EMP 테이블에서 그들의 상사보다 먼저 입사한 사원에 대해 사원이름, 사원의 입사일, 상사 이름, 상사 입사일을 출력
select e.ename,e.hiredate,m.ename,m.hiredate from emp e,emp m
where e.mgr=m.empno and E.HIREDATE<M.HIREDATE;
15. 아래와 같이 사원의 급여와 사원의 급여만큼 ‘*’를 출력하라, * 하나는 100을 의미한다.
ENAME DNAME SAL/100 STAR |
ADAMS RESEARCH 11 *********** ALLEN SALES 16 **************** …… |
> col star format A55 를 실행한 후에 쿼리 실행
> SELECT ~
select ename,d.dname,floor(sal/100),lpad('*',sal/100,'*') "star" from emp e,dept d
where e.deptno=d.deptno;
16. 사원 테이블명을 E,상사 테이블명을 M으로 할 때 사원번호(E.EMPNO), 사원이름, 사원 급여, 사원 급여등급, 상사번호(M.EMPNO), 상사이름, 상사 급여, 상사 급여 등급을 출력하라. 단, 상사(M) 테이블에서 부하직원이 없는 사람도 출력하라.
select e.empno,e.ename,e.sal,s.grade,m.empno,m.ename,m.sal,ms.grade from emp e,emp m,salgrade s,salgrade ms
where e.mgr(+)=m.empno and e.sal>=s.losal and e.sal<=s.hisal and m.sal>=ms.losal(+) and m.sal<=ms.hisal(+);
17. 사원번호, 사원 이름, 사원의 급여,사원급여 등급, 상사번호, 상사 부서번호, 상사의 부서명을 출력하라. 단, 상사가 없는 사람도 출력하라.
select e.empno,e.ename,e.sal,s.grade,M.EMPNO,m.deptno,d.dname from emp e,dept d,emp m,salgrade s
where e.mgr=M.EMPNO and e.sal>=s.losal and e.sal<=s.hisal and m.deptno=d.deptno;
18. 사원번호, 사원 이름, 사원의 부서번호,사원의 부서명, 상사이름, 상사 부서번호, 상사의 근무지역을 출력하라. 단, 사원테이블의 상사가 없는 사람도 출력하고 사원이 존재하지 않는 부서번호와 부서명도 출력하라.
select e.empno,e.ename,e.deptno,d.dname,m.ename,m.deptno,d2.loc from emp e,dept d,emp m,dept d2
where e.deptno=d.deptno and e.mgr=m.empno and m.deptno=d2.deptno;
'DataBase' 카테고리의 다른 글
<DataBase_231106월> 레벨 쿼리 (0) | 2023.11.06 |
---|---|
<DataBase_231103금> 서브쿼리 문제&답안 (0) | 2023.11.03 |
<DataBase_231101수> 다중행 함수 (0) | 2023.11.01 |
<DataBase_231031화> 단일행 함수 문제&답안 (2) | 2023.10.31 |
<DataBase_231030월> 단일행 함수 (0) | 2023.10.30 |