본문 바로가기
Back-End/Database

[SQL] 서브 쿼리

by 찐코딩 2021. 10. 5.

서브 쿼리

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


주의사항 

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


사용방법

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

 

 

-- emp 테이블에서 이름이 'SCOTT'인 사원의 급여보다 더 많은 급여를 받는
-- 사원의 사번, 이름, 담당업무, 급여를 화면에 보여주세요.
select empno, ename, job, sal
from emp
where sal>(select sal
from emp
where ename = 'SCOTT');



-- [문제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);

 

★ 두개의 테이블을 사용하는 예

-- [문제4] 부서위치가 'DALLAS'인 사원의 사번, 이름, 부서번호를 화면에 출력
SELECT DEPTNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'DALLAS');

 

★ 특정 값 제외하고 보고 싶을 때

-- [문제8] EMP 테이블에서 'BLAKE'와 같은 부서에 있는 사원들의 이름과 입사일자,
--  부서번호를 화면에 보여주되, 'BLAKE'는 제외하고 화면에 출력
SELECT ENAME, HIREDATE, DEPTNO
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE ENAME = 'BLAKE')
AND ENAME != 'BLAKE';

 

-- [문제14] EMP 테이블에서 보너스를 받는 사원과 부서번호, 급여가 같은 사원들의
-- 이름, 급여, 부서번호를 화면에 보여주세요 
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE COMM > 0)
AND SAL IN (SELECT SAL FROM EMP WHERE COMM > 0);  
-- SAL = 이 아닌 SAL IN 으로 표기, in으로 쓰면 에러 발생

 

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

[SQL] 트랜잭션(transaction)  (0) 2021.10.05
[SQL] GROUP BY 절 / HAVING절  (0) 2021.10.05
[SQL] 컬럼 속성(제약 조건)  (0) 2021.10.05
[SQL] view  (0) 2021.10.05
[SQL] 숫자 관련 기본 함수  (0) 2021.10.05

댓글