본문 바로가기
Programming/Database

[Database] 서브쿼리

by 코딩여걸 2021. 8. 20.
728x90

서브쿼리란?

  • 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문을 말한다.

예제1) 7566 사원보다 급여를 많이 받는 사원의 이름, 급여를 조회하라 

-- 7566사원이 받는 급여
select sal
from emp
where empno = 7566;

7566사원이 받는 급여는 2975이다.

 

select ename, sal
from emp
where sal > 2975;

7566사원이 받는 급여인 2975를 바로 써서 비교해도 되고,

 

-- 조건절(where)에 서브쿼리가 들어감
select ename, sal
from emp
where sal > (select sal
             from emp
             where empno = 7566);

조건절(where)에 서브쿼리를 써서 비교해도 된다.

 

예제2) emp테이블에서 사원번호가 7521인 사원과 업무가 같고, 급여가 7934 사원번호를 가진 사원보다 급여가 많은 사원의 사원번호, 이름, 담당업무, 입사일자, 급여를 출력하라 

-- 1. 'emp 테이블에서 사원번호가 7521인 사원의 업무(job)' 를 처리하는 select문 작성
select job
from emp
where empno = 7521;

먼저 emp 테이블에서 사원번호가 7521인 사원의 업무(job)를 구한다.

 

-- 2. 'emp 테이블에서 7934 사원번호를 가진 사원의 급여(sal)' 를 출력하는 select문 작성
select sal
from emp
where empno = 7934;

emp 테이블에서 7934 사원번호를 가진 사원의 급여(sal)를 구한다.

 

-- 예제2번 결과
select empno, ename, job, hiredate, sal
from emp
where job = (select job
             from emp
             where empno = 7521)
    AND
    sal > (select sal
    from emp
    where empno = 7934);

위에 두 조건을 서브쿼리로 표현해주면 된다.

 

예제3) emp 테이블에서 급여를 제일 많이 받는 사원의 이름, 부서번호, 급여, 입사일자를 조회하라 

-- emp테이블에서 급여를 최대값(MAX)
select MAX(sal) from emp;  -- 최대값을 구하는 쿼리문

emp 테이블에서 급여의 최대값을 구하면 5000이 나온다.

-- 이렇게 못 씀
select empno, ename, deptno, MAX(sal), hiredate from emp;
-- 예제 3번 정답
select empno, ename, deptno, sal, hiredate
from emp
where sal = 5000;

이렇게 쓸 수도 있지만 서브쿼리로 작성하면

-- 5000 대신에 서브쿼리를 작성
select empno, ename, deptno, sal, hiredate
from emp
where sal = (select MAX(sal)
             from emp);

이렇게 된다.

 

예제4) emp 테이블에서 급여의 평균보다 적은 사원의 사원번호, 이름, 담당업무, 급여, 부서번호를 출력하라

-- emp테이블에서 급여의 평균값을 구하는 서브쿼리를 작성한다.
select trunc(AVG(sal)) from emp;
-- 예제4번 정답
select empno, ename, job, sal, deptno
from emp
where sal < (select trunc(AVG(sal))
             from emp);
728x90

'Programming > Database' 카테고리의 다른 글

[Database] 슈도컬럼(Pseudo-Column)  (0) 2021.08.20
[Database] 다중행 서브쿼리  (0) 2021.08.20

댓글