본문 바로가기

DB/OracleSQL

복습문제 - 조인(JOIN)문

07.08 복습문제 - 조인(JOIN)문

Q. 5-1 이름과 부서위치를 출력하시오
select ename, loc
from emp e, dept d
where e.deptno = d.deptno;​
Q. 5-2 위의 결과를 다시 출력하는데 부서위치가 DALLAS 인 사원들만 출력하시오
select ename, loc
from emp e, dept d
where e.deptno = d.deptno
and loc = 'DALLAS';​
Q. 5-3 직업이 SALESMAN 인 사원들의 이름과 월급과 직업과 부서위치를 출력하시오
select ename, sal, job, loc
from emp e, dept d
where e.deptno = d.deptno
and job = 'SALESMAN';​
Q. 5-4 위의 결과를 다시 출력하는데 이름과 월급과 직업과 부서위치, 부서번호를 출력하시오
select e.ename, e.sal, e.job, d.loc, e.deptno
from emp e, dept d
where e.deptno = d.deptno
and e.job = 'SALESMAN';​
Q. 5-5 월급이 3000 이상인 사원들의 이름과 월급과 부서위치를 출력하시오
select ename, sal, loc
from emp e, dept d
where e.deptno = d.deptno
and sal >= 3000;​
Q. 5-6 직업이 SALESMAN 인 사원들의 이름과 직업과 월급과 부서위치를 출력하시오
select ename, job, sal, loc
from emp e, dept d
where e.deptno = d.deptno
and job = 'SALESMAN';​
Q. 5-7 직업이 SALESMAN 인 사원들의 이름과 직업과 월급과 부서위치를 출력하시오
select loc, ename, sal, rank() over(order by sal desc) as rk
from emp e, dept d
where e.deptno = d.deptno;​
Q. 5-8 위의 결과를 다시 출력하는데 부서위치별로 각각 순위가 출력되게 하시오
select d.loc, e.ename, e.sal, 
        dense_rank() over(partition by d.loc
                               order by sal asc)
from emp e, dept d
where e.deptno = d.deptno;​
Q. 5-9 부서위치, 해당 부서위치에 근무하는 사원들의 이름을 가로로 출력하시오
select d.loc, listagg(e.ename,', ') within group (order by e.ename) as "ename"
from emp e, dept d
where e.deptno = d.deptno
group by d.loc;​
Q. 5-10 emp 테이블과 salgrade 테이블을 서로 조인해서 이름, 월급, 등급(grade)을 출력하시오
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;​

 

Q. 5-11 부서위치, 부서위치별 토탈월급을 출력하시오
select d.loc, sum(e.sal)
from dept d, emp e
where e.deptno = d.deptno
group by d.loc;​

 

Q. 5-12 위의 결과를 다시 출력하는데 부서위치가 DALLAS 는 제외하고 출력하시오
select d.loc, sum(e.sal)
from dept d, emp e
where d.loc not in ('DALLAS')
group by d.loc;​

 

Q. 5-13 부서위치, 입사한 년도(4자리) , 부서위치별 입사한 년도별 인원수를 가로로 출력 하시오
select sum(decode(d.loc,'NEW YORK',sal,0)) as "NEW YORK"
        ,sum(decode(d.loc,'DALLAS',sal,0)) as "DALLAS"
        ,sum(decode(d.loc,'CHICAGO',sal,0)) as "CHICAGO"
from emp e, dept d
where e.deptno = d.deptno;
select *
from (select d.loc, e.sal
        from emp e, dept d
        where e.deptno = d.deptno)
pivot (sum(sal) for loc in ('NEW YORK','DALLAS','CHICAGO'));
Q. 5-14 어느 부서위치에 사원이 배치 되지 않았는지 확인하시오
select e.ename, d.loc
from emp e, dept d
where e.deptno (+) = d.deptno;​
Q. 5-15 이름, 부서위치를 출력하는데 이름쪽에는 데이터가 나오는 데 부서위치에는 데이터 가 나오지 않는 결과를 출력하시오
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno(+);​
Q. 5-16 양쪽에 다 아우터 조인 사인을 써서 결과를 보게하려면 어떻게 해야하는가 ?
select e.ename, d.loc
from emp e full outer join dept d
on (e.deptno = d.deptno) ;​
Q. 5-17 부서위치, 부서위치별 토탈월급을 출력하시오
select d.loc, nvl(sum(e.sal),0)
from emp e, dept d
where e.deptno (+) = d.deptno
group by d.loc;​
Q. 5-18 부서위치, 부서위치별 인원수를 출력하는데 사원이 없는 부서위치는 인원수가 0 으 로 출력되게 하시오
select d.loc, nvl(count(e.ename),0)
from emp e, dept d
where e.deptno(+) = d.deptno
group by d.loc;​
Q. 5-19 사원이름, 관리자의 이름을 출력하시오
select e.ename, m.ename
from emp e, emp m
where e.mgr = m.empno(+);​
Q. 5-20 사원 이름, 관리자 이름을 출력하는데 관리자 보다 더 많은 월급을 받는 사원들만 출력하시오
select e.ename, m.ename
from emp e, emp m
where e.mgr = m.empno and e.sal > m.sal;​
Q. 5-21 사원이름, 관리자 이름을 출력하는데 관리자보다 먼저 입사한 사원들만 출력하시오
select e.ename, m.ename
from emp e, emp m
where e.mgr = m.empno
and e.hiredate < m.hiredate;​
Q. 5-22 사원이름, 부서위치, 월급, 급여등급(grade) 를 출력하시오
select e.ename, d.loc, e.sal, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal;​
Q. 5-23 이름과 부서위치를 출력하는데 on 절을 사용한 조인으로 구현하시오
select e.ename, d.loc
from emp e join dept d
on (e.deptno = d.deptno);​
Q. 5-24 직업이 SALESMAN 인 사원들의 이름과 부서위치와 직업을 출력하시오 !(ON 절을 사 용한 조인으로 수행)
select e.ename, d.loc, e.job
from emp e join dept d
on (e.deptno = d.deptno)
where e.job = 'SALESMAN';​

 

Q. 5-25 이름, 월급, 부서위치, 급여등급을 출력하는데 ON 절을 사용한 조인으로 수행하시오
select e.ename, d.loc, e.job, s.grade
from emp e join dept d
on (e.deptno = d.deptno)
join salgrade s
on(e.sal between s.losal and s.hisal);​
Q. 5-26 이름과 부서위치를 출력하는데 using 절을 사용한 조인으로 수행하시오
select e.ename, d.loc
from emp e join dept d
using (deptno);​
Q. 5-27 이름과 부서위치를 출력하는데 naturual 조인으로 수행하시오
select e.ename, d.loc
from emp e natural join dept d;​
Q. 5-28 이름과 부서위치를 출력하는데 cross join 하시오
select e.ename, d.loc
from emp e cross join dept d;​
Q. 5-29 이름과 부서위치를 출력하는 아래의 SQL 을 ANSI 문법으로 수행하시오
select e.ename, d.loc
from emp e, dept d
where e.deptno(+) = d.deptno;
select e.ename, d.loc
from emp e right outer join dept d
on (e.deptno = d.deptno);​

'DB > OracleSQL' 카테고리의 다른 글

복습문제 - 서브쿼리  (0) 2021.07.13
서브쿼리(Subquery)  (0) 2021.07.13
조인(JOIN)문  (0) 2021.07.13
복습문제 - 그룹행 함수  (0) 2021.07.12
복습문제 - 단일행 함수  (0) 2021.07.12