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 |
댓글