select ename
from emp
where empno in (
select mgr
from emp
where mgr is not null
);
문제1. KING 의 사원번호를 출력하시오
select empno
from emp
where ename='KING';
select ename
from emp
where mgr=7839;
💡 위의 3명의 사원들의 관리자는 KING 입니다.
select ename
from emp
where mgr = ( select empno
from emp
where ename='KING');
select ename
from emp
where empno in ( select mgr
from emp );
-- null 때문에 결과가 안나옴
select ename
from emp
where empno not in ( select mgr
from emp );
💡 not in은 !=all과 같음
empno != 7839 and empno != 7566 and empno != null
답
select ename
from emp
where empno not in ( select mgr
from emp
where mgr is not null);
💡 not in 사용시 주의사항! mgr에 null이 있지 않도록 SQL을 작성해야함
💡
select sal
from emp
where 1 = 2; -- 아무것도 출력되지 않습니다.
select count(*)
from emp
where 1 = 2; -- 0 이 출력됩니다.
-- 서브쿼리 사용
select ename, sal
from emp
where sal in ( select max(sal)
from emp
where job='SALESMAN');
-- 서브쿼리 사용 x
select ename, sal
from emp
where job='SALESMAN'
order by sal desc fetch first 1 rows only;
select to_char(hiredate,'RRRR'), null, sum(sal)
from emp
group by to_char(hiredate,'RRRR')
UNION ALL
select null, job, sum(sal)
from emp
group by job;
답
select to_char(hiredate, 'RRRR') 입사년도, job 직업, sum(sal) 토탈월급
from emp
group by grouping sets(to_char(hiredate, 'RRRR'), job);
select to_char(hiredate,'RRRR'), job, deptno, sum(sal)
from emp
group by grouping sets( to_char(hiredate,'RRRR'), job, deptno, () ) ;
답
select null 입사년도, job 직업, null 부서번호, sum(sal) 토탈월급
from emp
group by job
union all
select to_char(hiredate, 'RRRR'), null, null, sum(sal)
from emp
group by to_char(hiredate, 'RRRR')
union all
select null, null, deptno, sum(sal)
from emp
group by deptno
union all
select null, null, null, sum(sal)
from emp;
select nvl(to_char(deptno), '토탈') deptno,
sum(decode(job, 'ANALYST', sal, null)) "ANALYST",
sum(decode(job, 'CLERK', sal, null)) "CLERK",
sum(decode(job, 'MANAGER', sal, null)) "MANAGER",
sum(decode(job, 'PRESIDENT', sal, null)) "PRESIDENT",
sum(decode(job, 'SALESMAN', sal, null)) "SALESMAN",
sum(sal)
from emp
group by rollup(deptno);