[SQL] 서브쿼리 사용하기 - NOT IN

·2025년 7월 8일
0

SQL

목록 보기
88/126

예제 답

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';

문제2. 7839가 MGR(관리자 번호) 인 사원들의 이름을 출력하시오

select ename
 from emp
 where mgr=7839;

💡 위의 3명의 사원들의 관리자는 KING 입니다.

문제3. KING 의 직속 부하인 사원들 즉 KING을 관리자로 하는 사원들의 이름을 출력하시오

select ename
 from emp
 where mgr = ( select empno
                from emp
                where ename='KING');

문제4. 사원번호가 관리자 번호(MGR) 인 사원들의 이름을 출력하시오

select ename
 from emp 
 where empno in ( select mgr
                    from emp );

문제5. 사원번호가 관리자 번호가 아닌 사원들의 이름을 출력하시오

-- 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을 작성해야함

문제6. 다음의 SQLD 기출문제를 풀어보시오

💡

select sal
from emp
where 1 = 2; -- 아무것도 출력되지 않습니다.

select count(*)
from emp
where 1 = 2; -- 0 이 출력됩니다.


문제7. 직업이 SALESMAN 인 사원들 중에서 가장 월급을 많이 받는 사원의 이름과 월급을 출력하시오

-- 서브쿼리 사용
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;

복습문제1. 아래의 SQL을 grouping sets 로 수행하시오

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);

복습문제2. 아래의 SQL을 union all 로 수행하시오

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;

(SQLP 기출문제) 다음과 같이 결과를 출력하시오

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);

0개의 댓글