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