문제111. 최대 월급을 받는 사원의 이름과 월급을 출력하시오.
select ename,max(sal)
from emp;
*subquery를 사용해야 한다. (왜 ? ?? ?)
문제112.JONES의 월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오.
(우선 JONES의 월급을 알아야겠지??)
select sal
from emp
where ename='JONES' ;
select ename,sal
from emp
where sal> (select sal
from emp
where ename='JONES') ;
빨간색은 메인쿼리, 파란색은 서브쿼리 라고 한다.이렇게 한꺼번에 쿼리를 써서 한방에 구하자는 것.오라클이 서브쿼리를 먼저 시행한데, 존스의 월급을 리턴하고 그리고 이제 메인쿼리를 돌린다.
문제113. SCOTT과 같은 월급을 받는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where sal = (select sal
from emp
where ENAME = 'SCOTT' )
이렇게 하면 스캇도 같이 나오거든 그래서
문제114. 위의 결과에서 scott은 제외하고 출력하시오.
select ename,sal
from emp
where sal = (select sal
from emp
where ENAME = 'SCOTT' )
and ename != 'SCOTT' ;
이때 != 이거는 서브쿼리가 아니라 메인쿼리다.
문제115. ALLEN의 같은 부서번호에서 근무하는 사원들의 이름과 부서번호를 출력하시오.
select ename,deptno
from emp
where deptno = (select deptno
from emp
where ename = 'ALLEN');
(ALLEN을 제외하고 나와라~ 하면)
and ename != 'ALLEN' ;
문제116.ALLEN 보다 늦게 입사한 사원들의 이름과 입사일을 출력하시오.
select ename,hiredate
from emp
where hiredate < (select hiredate
from emp
where ename = 'ALLEN') ;
문제 117. DALLAS에 있는 부서번호에서 근무하는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where deptno = (select deptno
from dept (emp도 되고~! 난 emp했었으)
where LOC = 'DALLAS')
문제 118.직업이 SALESMAN인 사원들의 최대월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where sal > (select max(sal)
from emp
where JOB ='SALESMAN' ) ;
group by sal 어 그룹 by 안해도되나..?
문제 119.최대월급을 받는 사원의 이름과 월급을 출력하시오
select ename,sal
from emp
where sal = (select max(sal)
from emp) ;
이렇게 서브쿼리를 쓰지 않으면 안 풀리는 문제..!
(왜..지...?)
문제120.KING에게 보고하는 사원들의 이름과 월급을 출력하시오(KING의 직속부하 사원들)
select ename,sal
from emp
where mgr = select empno
from emp
where ename = 'KING' );
문제 121.직업이 SALESMAN인 사원들과 같은 월급을 받는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where sal in (select sal
from emp
where job= 'SALESMAN') ;
(직업이 salesman 이 한개면 상관없는데 여러개 일수도 있으니까~~ )
*subquery의 종류 3가지
1. single row subquery
서브쿼리에서 메인쿼리로 하나의 값이 리턴되는 경우
연산자 : > , < , >= , <= , != , ^= , <>
2. multiple row subquery
서브쿼리에서 메인쿼리로 여러개의 값이 리턴되는 경우.
연산자 : in, not in , >all , <all , >any , <any
3. multiple column subquery
서브쿼리에서 메인쿼리로 여러개의 컬럼값이 리턴되는 경우
문제 122.직업이 SALESMAN인 사원들과 월급이 같지 않은 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where sal not in (select sal
from emp
where job = 'SLAESMAN') ;
문제 123. 관리자인 사원들의 이름을 출력하시오.
자기밑에 있는 직속부하가 한명이라도 있는 사원들을 출력하시오 !
select ename
from emp
where empno in (select mgr
from emp) ;
문제 124.관리자가 아닌 사원들의 이름을 출력하시오.(이 문제 뭔 의미지..)
select ename
from emp
where empno not in (select mgr
from emp) ;
이거 뭐하는기고
select ename
from emp
where empno not in (select mgr
from emp
where mgr is not null) ;
********not in을 쓸 때는 꼭 널 처리를 해줘야된다!!!@@ 반드시!!!
근데 낫인 뿐만 아니라 .. 그냥 다 그런거 아니가
문제 125.직업이 SALESMAN인 사원들 중에서 가장 많은 월급을 받는 사원보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오
select ename,sal
from emp
where sal > (select max(sal)
from emp
where job = 'SALESMAN')
select ename,sal
from emp
where sal >all (select sal
from emp
where job = 'SALESMAN')
>all (1000,2000,3000)
>all 은 가장 큰값보다 크다.
all쓰고 안쓰고 차이가 있다.순서가 틀리다. 데이터는 같은데 순서가 틀리다.
문제 126. 직업이 SALESMAN인 사원들 중에서 가장 작은 월급을 받는 사원보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where sal > any ( select sal (min 쓰던지)
from emp
where job= 'SLAESMAN' )
all,any 성능은 안좋아서 잘안쓰는데 알고는 있어야 된다~~~
문제 127. 20번 부서번호인 사원들 중에서 가장 늦게 입사한 사원의 이름과 입사일과 부서번호를 출력하시오.
multiple column subquery (여러개의 컬럼값이 리턴될 수 있다. 그전에는 월급만 리턴했는데, 이걸 쓰면 부서번호와 월급을 같이 리턴할 수 있다.)
select ename,hiredate,deptno
from emp
where hiredate < any (select hiredate
from emp
where deptno = 20) ;
'디비1' 카테고리의 다른 글
디비 - 5월18일 월요일 (0) | 2015.05.19 |
---|---|
디비 - 5월11일 월요일 (0) | 2015.05.11 |
디비1 - 4월27일 (0) | 2015.04.27 |
@@@@@@@@중간고사 끝@@@@@@@@@@@@@@@ (0) | 2015.04.27 |
문제공유 풀이 (0) | 2015.04.19 |