본문 바로가기

JAVA 공책/알고리즘 문제

DB(Oracle)_서브쿼리_다중행 연산자 연습문제

Q.emp 테이블에서 부서별로 가장 급여를 많이 받는 사원들과 동일한 급여를 받는 사원 번호(empno), 사원이름(ename), 급여(sal), 부서번호(deptno)를 출력하시오.(IN 연산자 이용)


A.해결

--부서별로 가장 큰 급여를 조회 (부서별로 가장 급여를 많이 받는 사원)

▼코드

select max(sal)

from emp

group by deptno;


(정답)

▼코드

select empno, ename, sal, deptno

from emp

where sal in (select max(sal)

from emp

group by deptno);

Q.emp 테이블에서 직급(JOB)이 MANAGER인 사람이 속한 부서의 부서 번호(deptno)와 부서명(dname)과 지역(loc)을 출력하시오.


A.해결

--출력 결과가 여러개인지 아닌지 확인

▼코드

select deptno

from emp

where job = 'MANAGER';

(정답)

▼코드

select deptno, dname, loc

from dept

where deptno in ( select deptno

from emp

where job = 'MANAGER');

Q.deptno가 30인 부서의 사원들 전체보다 sal 많은 사원의 ename과 sal 조회


A.해결

--deptno가 30인 부서의 사원들 전체보다 sal 많은 사원의 ename과 sal 조회

--아래 문장은 에러 : deptno가 30인 데이터가 2명이기 때문

▼코드

select ename, sal

from emp

where sal > (select sal

from emp

where deptno =30);


--이 경우에는 >연산자 다음에 all을 추가해서 해결할 수 있음

▼코드

select ename, sal

from emp

where sal > all(select sal

from emp

where deptno =30);


-- > all의 경우는 max 보다 크다로 변경이 가능.

▼코드

select ename, sal

from emp

where sal > (select max(sal)

from emp

where deptno =30);


Q.EMP 테이블에서 ename이 BLAKE 인 데이터와 같은 부서(deptno)에 있는 모든 사원의 이름(ename)과 입사일자(hiredate)를 출력하는 SELECT문을 작성하시오.


A.해결

▼코드

select ename, hiredate

from emp

where deptno = (select deptno

from emp

where ename = 'BLAKE');

order by hiredate;


Q.EMP 테이블에서 평균 급여(sal) 이상을 받는 모든 종업원에 대해서 종업원 번호(empno)와 이름(ename)을 출력하는 SELECT문을 작성하시오. 단 급여가 많은 순으로 출력하여라.


A.해결

--정렬은 order by - 데이터베이스는 데이터를 저장할 때 순서라는 개념이 없습니다. 2개 이상의 데이터를 조회하는 경우에는 order by를 사용하는 것이 좋습니다.

(내답)

▼코드

select empno, ename

from emp

where sal > all( select AVG(sal)

from emp);

order by empno;


(정답)

▼코드

select empno, ename

from emp

where sal >= ( select AVG(sal)

from emp);

order by sal desc;



'JAVA 공책 > 알고리즘 문제' 카테고리의 다른 글