일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- java string
- java spider
- java
- java 구구단
- sqld deny
- SQLD 특강
- java 함수
- JAVA 연산자
- sqld 옵티마이져
- sqld revoke
- Java 메소드
- JAVA 제어문
- java 성별
- PLSQL
- java 상속
- sqld trigger
- SQLD 자격시험 개념정리
- java Animal
- java 논리연산자
- sqld remame
- java Fish
- Java Cat
- sqld grant
- java 단축키
- SQL
- sqld 자격증
- SQLD 핵심포인트
- SQLD 옵티마이저
- java 로또
- JAVA for문
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Oracle] SQL Class 9 - 숙제 본문
SUBQUERY (SCOTT 계정으로!)
set linesize 120
1. 이름이 ALLEN인 사원과 같은 업무를 하는 사람의 사원번호, 이름, 업무, 급여
(정답1)
SQL> select empno, ename, job, sal from emp
where job=(select job from emp where ename='ALLEN');
(정답2)
SQL> select e.ename, d.dname, e.sal, e.empno
from emp e, dept d
where d.dname=(select d.dname from emp e, dept d
where e.deptno = d.deptno and e.ename='ALLEN') and e.ename is not null;

2. EMP 테이블의 사원번호가 7521인 사원과 업무가 같고 급여가 사원번호가 7934인 사원보다 많은 사원의 사원번호, 이름, 담당업무, 입사일, 급여
(정답1)
SQL> select empno, ename, job, hiredate, sal from emp
where job in (select job from emp where empno='7521') and sal>(select sal from emp where empno='7934');
(정답2)
SQL> select empno, ename, job, hiredate, sal from emp
where job=(select job from emp where empno=7521) and sal > (select sal from emp where empno = 7934);

3. EMP 테이블에서 급여의 평균보다 적은 사원의 사원번호, 이름, 업무, 급여, 부서번호
(정답1)
SQL> select empno, job, sal, deptno from emp
where sal<(select avg(sal) from emp);

4. 부서별 최소급여가 20번 부서의 최소급여보다 작은 부서의 부서번호, 최소급여
(정답1)
SQL> select empno, ename, job, sal, deptno from emp
where sal in (select min(sal) from emp group by deptno);
(정답2)
SQL> select d.deptno, min(e.sal) from dept d, emp e
where d.deptno=e.deptno
group by d.deptno
having min(e.sal) < (select min(sal) from emp where deptno=20);
(정답3)
SQL> select sal, deptno from emp
where sal < (select min(sal) from emp where deptno = 20 group by deptno);
(정답4)

5. 업무별 급여 평균 중 가장 작은 급여평균의 업무와 급여평균
(작성1)
SQL> select deptno, job, sal, from emp
where sal=(select min(avg(sal)) from emp group by job);
(정답2)
SQL> select job, avg(sal) from emp group by job having avg(sal) in (select amin from (select avg(sal) amin from emp group by job order by 1) where rownum=1);
6. 업무별 최대 급여를 받는 사원의 사원번호, 이름, 업무, 입사일, 급여, 부서번호
(정답1)
SQL> select empno, ename, job, deptno from emp
where (job,sal) in (select job, max(sal) from emp group by job);
(정답2)
SQL> select empno "사원번호", ename "이름", job "업무", hiredate "입사일", sal "급여", deptno "부서번호" from emp
where (job,sal) in (select job, max(sal) from emp group by job);

7. 30번 부서의 최소급여를 받는 사원보다 많은 급여를 받는 사원의 사원번호, 이름, 업무, 입사일, 급여, 부서번호, 단 30번 부서는 제외
(정답1)
SQL> select deptno, min(sal) from emp
group by deptno
having min(sal)>(select min(sal) from emp where deptno=30);
(정답2)
SQL> select empno, ename, job, hiredate, sal, deptno from emp
where sal > (select min(sal) from emp group by deptno having deptno=30) and deptno <> 30;
(정답3)
SQL> select ename, job, hiredate, sal, deptno from emp
where sal > (select min(sal) from emp where deptno=30) and deptno !=30;

8. 급여와 보너스가 30번 부서에 있는 사원의 급여와 보너스가 같은 사원을 30번 부서의 사원은 제외하고 출력하라.
(정답1)
SQL> select ename, sal, comm from emp group by deptno
having sal+comm >(select sal+comm from emp where deptno=30);
(정답2)
SQL> select ename, sal, nvl(comm,-1) from emp where (sal, nvl(comm, -1)) in (select sal, nvl(comm, -1) from emp where deptno =30) and deptno <>30;(정답3)
SQL> select ename, sal, comm, deptno from emp where (sal, comm) in (select sal, comm from emp where deptno=30) and deptno !=30;
9. BLAKE와 같은 부서에 있는 모든 사원의 이름과 입사일자를 출력
(정답1)
SQL> select ename, hiredate from emp
where deptno=(select deptno from emp where ename like ‘BLAKE’);
(정답2)
SQL > select ename, hiredate, deptno from emp
where deptno in (select deptno from emp where ename='BLAKE');

10. 평균급여 이상을 받는 모든 사원에 대해 사원의 번호와 이름을 출력, 급여가 많은 순서로..
(정답1)
SQL> select deptno, ename, sal from emp
where sal>(select avg(sal) from emp)
order by sal desc;
(정답2)
SQL> select deptno, ename, sal from emp
where sal>(select avg(sal) from emp)
order by 3 desc;
(정답3)
SQL> select deptno, ename, sal from emp
where sal>=(select avg(sal) from emp)
order by sal desc;

11. 이름에 T가 있는 사원이 근무하는 부서에서 근무하는 모든 사원에 대해 사원번호, 이름, 급여를 출력, 사원번호 순서로 출력
(정답1)
SQL> select empno, ename, sal from emp
where deptno in (select deptno from emp where ename like '%T%');
(정답2)
SQL> select empno, ename, sal, deptno from emp
where deptno in (select deptno from emp where ename like '%T%');
order by 1;
(정답3)
SQL> select empno, ename, sal, deptno from emp
where deptno in (select deptno from emp where ename like '%T%');
order by empno;

12. 부서위치가 CHICAGO인 모든 사원에 대해 이름, 업무, 급여 출력
(정답1)
SQL> select ename, job from emp
where job in (select job from emp e, dept d where e.deptno=d.deptno and loc='CHICAGO');
(정답2)
SQL> select e.ename, e.job, e.sal, d.loc from emp e, dept d
where d.loc in (select loc from dept where loc = 'CHICAGO') and e.deptno=d.deptno;
(정답3)
SQL> select deptno, ename, job, sal from emp e
where deptno = (select deptno from dept d where e.deptno = d.deptno and loc = 'CHICAGO');

13. KING에게 보고하는 모든 사원의 이름과 급여를 출력
(정답1)
SQL> select ename, sal from emp
where mgr in (select empno from emp where ename='KING');

14. FORD와 업무와 월급이 같은 사원의 모든 정보 출력
(정답1)
SQL> select * from emp
where (job, sal) in (select job, sal from emp where ename='FORD') and ename != 'FORD';
(정답2)
SQL> select *from emp
where (job, sal) in (select job, sal from emp where ename='FORD');

15. 업무가 JONES와 같거나 월급이 FORD 이상인 사원의 이름, 업무, 부서번호, 급여 출력
(정답1)
SQL> select ename, job, deptno, sal from emp
where job in (select job from emp where ename='JAMES') or sal in (select sal from emp where ename = 'FORD');
(정답2)
SQL> select ename, job, deptno, sal from emp
where job=(select job from emp where ename='JONES') or sal > (select sal from emp where ename='FORD');

16. SCOTT 또는 WARD와 월급이 같은 사원의 이름, 업무, 급여를 출력
(정답1)
SQL> select ename, job, sal from emp
where sal in (select sal from emp where ename='SCOTT' or ename='WARD');
(정답2)
SQL> select ename, job, sa from emp
where sal in (select sal from emp where ename='SCOTT') or sal in(select sal from emp where ename='WARD');

17. SALES에서 근무하는 사원과 같은 업무를 하는 사원의 이름, 업무, 급여, 부서번호 출력
(정답1)
SQL> select ename, job, sal, deptno from emp
where deptno in (select deptno from dept where dname='SALES');
(정답2)
SQL> select ename, job, sal, deptno from emp
where deptno = (select deptno from dept where dname = 'SALES');

18. 자신의 업무별 평균 월급보다 낮은 사원의 부서번호, 이름, 급여, 자신의 부서 평균급여를 출력
(정답1)
SQL> select empno, ename, sal from emp e
where sal < (select avg(sal) from emp where job = e.job);
(정답2)
SQL> select e.job, e.deptno, e.ename, e.sal, d.dsal
from emp e, (select job, avg(sal) asal from emp group by job) s,
(select deptno, avg(sal) dsal from emp group by deptno) d
where e.job=s.job and e.deptno=d.deptno and e.sal<s.asal;
(정답3)
SQL> select job, e.deptno, e.ename, e.sal, 부서평균급여
from emp e, (select deptno, avg(sal) 부서평균급여 from emp group by deptno) d
where e.deptno(+) = d.deptno
and e.sal < (select avg(sal) from emp)
order by job;

19. 사원번호, 사원명, 부서명, 소속부서 인원수, 업무, 소속 업무 급여평균,급여를 출력(hard)
(정답1)
SQL> select e.empno, e.ename, d.dname, (select count(*) from emp t
where e.deptno=t.deptno) "소속부서 인원수", job, (select (avg(sal)) from emp t where e.job=t.job) "소속업무급여평균", e.sal from emp e, dept d where e.deptno=d.deptno;
(정답2)
SQL> with c as (select deptno, count(*) cnt from emp group by deptno), a as (select job, avg(sal) avg from emp
group by job)
select e.empno, e.ename, d.dname, c.deptno, c.cnt, a.job, a.avg from emp e,dept d,c, a
where e.deptno = d.deptno and c.deptno = e.deptno and e.job = a.job;
(정답3)
SQL> with a as(select e.empno, e.ename, e.deptno, e.job, e.sal, d.dname from emp e, dept d
where e.deptno = d.deptno), b as (select deptno, count(*) deptcnt from emp group by deptno), -- 소속부서 인원수
c as (select job, avg(sal) jobsal from emp group by job) -- 소속 업무 급여평균
select a.empno, a.ename, a.deptno, a.job, a.sal, a.dname, b.deptcnt, c.jobsal
from a, b, c
where a.deptno = b.deptno and a.job = c.job;

20. 사원번호, 사원명, 부서번호, 업무, 급여, 자신의 소속 업무 평균급여를 출력(hard) // 상호연관 서브쿼리
(정답1)
SQL> select e.empno, e.ename, e.deptno, e.job, e.sal, (select (avg(sal)) from emp t where e.job=t.job) "소속업무 평균급여" from emp e, dept d where e.deptno=d.deptno;
(정답2)
SQL> select e.empno, e.ename, e.deptno, e.job, e.sal, j.avg
from emp e, (select job, avg(sal) avg from emp group by job) j
where e.job = j.job;
(정답3)
SQL> select e.empno, e.ename, e.deptno, e.job, e.sal, j.savg
from emp e, (select job, avg(sal) savg from emp group by job) j
where e.job = j.job(+);

21. 최소한 한 명의 부하직원이 있는 관리자의 사원번호, 이름, 입사일자, 급여 출력
(정답1)
SQL> select distinct(e1.empno),e1.ename,e1.hiredate, e1.sal from emp e1, emp e2
where e1.empno=e2.mgr;
(정답2)
SQL> select m.empno, m.ename, m.hiredate, m.sal from emp m
where exists(select e.mgr from emp e where e.mgr = m.empno);

22. 부하직원이 없는 사원의 사원번호, 이름, 업무, 부서번호 출력
(정답1)
SQL> select empno, ename, job, deptno from emp
where empno not in (select mgr from emp where mgr is not null);
(정답2)
SQL> select empno, ename, job, deptno from emp e
where not exists (select empno from emp m where m.mgr=e.empno);
(정답3)
SQL> select m.empno, m.ename, m.hiredate, m.sal from emp m
where not exists(select e.mgr from emp e where e.mgr = m.empno);

23. BLAKE의 부하직원의 이름, 업무, 상사번호 출력
(정답1)
SQL> select e.ename, e.job, e.mgr from emp e, emp m
where e.mgr = m.empno and m.ename='BLAKE';
(정답2)
SQL> select ename, job, mgr from emp
where mgr = (select empno from emp where ename = 'BLAKE');

24. BLAKE와 같은 상사를 가진 사원의 이름, 업무, 상사번호 출력
(정답1)
SQL> select ename, hiredate from emp
where deptno not in (select mgr from emp where ename like ‘BLAKE’);
(정답2)
SQL> select ename, job, mgr from emp
where mgr = (select mgr from emp where ename = 'BLAKE');

##남교수님 정답건
'SQL' 카테고리의 다른 글
[Oracle] SQL Class 11.1 - [보안객체] privilege, Role, Synonym (0) | 2023.11.08 |
---|---|
[Oracle] SQL Class 10 - TCL, 시퀀스, view, 사용자 정의 view, Index (0) | 2023.11.07 |
[Oracle] SQL Class 9 - DML 명령, 실습예제, 병합(merge) (0) | 2023.11.06 |
[Oracle] SQL Class 5(남교수님 정리)- 단일행함수 마무리 (0) | 2023.11.06 |
[Oracle] SQL Class 8 - Join 실습예제 (0) | 2023.11.06 |