본문 바로가기
Back/Database

서브 쿼리(SUB QUERY)

by 시월해 2021. 4. 7.

서브 쿼리


- 하나의 쿼리문 안에 포함되어 있는 또 하나의 쿼리문을 말함.
- 서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계임.
- 여러번 쿼리를 실행해서 얻을수 있는 결과를 하나의 중첩된 쿼리 문장으로 결과를 얻을 수 있게 해줌.

- 주의사항
1) 서브쿼리는 괄호로 묶어서 사용해야함.
2) 서브쿼리 안에서는 ORDER BY 절은 사용할 수 없음.
3) 연산자 오른쪽에 사용해야 함.

- 사용방법 : 우선은 안쪽에 있는 쿼리문을 실행 후, 그 결과값을 가지고 바깥쪽 쿼리문을 실행 

 

[예제 테이블]

EMP 테이블
MEMBER10 테이블

-- emp 테이블에서 이름이 'SCOTT'인 사원의 급여보다 더 많은 급여를 받는
-- 사원의 사번, 이름, 담당업무, 급여를 화면에 보여주세요.

SELECT empno, ename, job, sal
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename = 'SCOTT');

-- [문제1] emp 테이블에서 평균 급여보다 더 적게 받는
-- 사원의 사번, 이름, 담당업무, 급여, 부서번호 출력
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE SAL < (SELECT AVG(SAL) FROM EMP);

-- [문제2] emp 테이블에서 사번이 7521인 사원과 담당업무가 같고,
-- 급여가 7934인 사원보다 더 많이 받는 사원의 사번, 이름, 담당업무, 급여 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7521)
AND SAL > (SELECT SAL FROM EMP WHERE EMPNO = 7934);

-- [문제3] emp 테이블에서 담당업무가 'MANAGER'인 사원의 최소급여보다 적으면서
-- 담당업무가 'CLERK'은 아닌 사원의 사번, 이름, 담당업무, 급여 출력
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE JOB != 'CLERK' 
AND SAL < (SELECT MIN(SAL) FROM EMP WHERE JOB = 'MANAGER');

-- [문제5] member10 테이블에 있는 고객의 정보 중 마일리지가 가장 높은 고객의 모든 정보 출력
SELECT *
FROM MEMBER10
WHERE MILEAGE = (SELECT MAX(MILEAGE) FROM MEMBER10);

-- [문제10] emp 테이블에서 이름에 'T'를 포함하고 있는 사원들과 같은 부서에 근무하고 있는
-- 사원의 사번, 이름, 부서번호 출력
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE ENAME LIKE '%T%');

-- [문제13] emp 테이블에서 자신의 급여가 평균 급여보다 많고, 이름에 'S'자가 들어가는 사원과
-- 동일한 부서에서 근무하는 모든 사원의 사번, 이름, 급여, 부서번호 출력
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO
                   FROM EMP
                   WHERE ENAME LIKE '%S%' 
                   AND SAL > (SELECT AVG(SAL) FROM EMP));

-- [문제18] member10 테이블에 있는 고객 정보 중 마일리지가 가장 높은 금액을 가지는
-- 고객에게 보너스 마일리지 5000점을 더 주어 고객명, 마일리지, 마일리지+500점을 출력
SELECT MEMNAME, MILEAGE, MILEAGE+5000
FROM MEMBER10
WHERE MILEAGE = (SELECT MAX(MILEAGE) FROM MEMBER10);

 

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

VIEW(뷰)  (0) 2021.04.07
GROPU BY  (0) 2021.04.07
Oracle(SQL) 기본 제공 함수  (0) 2021.04.07
SQL JOIN  (0) 2021.03.31
SQL NVL, LITERAL, AS, DISTINCT, WHERE절 활용  (0) 2021.03.26