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 공책 > 알고리즘 문제' 카테고리의 다른 글
자바 문제 (0) | 2018.07.31 |
---|---|
DB(Oracle)_서브쿼리_단일행 연산자 연습문제 (0) | 2018.07.27 |
DB(Oracle)_Join_연습문제 (0) | 2018.07.26 |
DB(Oracle)_그룹함수_연습문제 (0) | 2018.07.26 |
DB(Oracle)_연습문제 (0) | 2018.07.25 |