: 메인쿼리문 안의 쿼리문이다.
쿼리문 안에 쿼리문이 들어가는 것(nesting)으로 복잡한 쿼리문을 하나의 쿼리문의 처리하기 위하여 사용한다.
Nesting: 메모리가 허용하는 한 무제한으로 중첩할 수 있다
SELECT deptNo
FROM employee
WHERE empName = '김관우';
SELECT depName
FROM department
WHERE deptNo = ( SELECT deptNo
FROM employee
WHERE empName = '김관우');
위와 같이 서브쿼리를 사용하면
depNo
가20
에 해당하는depName
의인사부
를 추출할 수 있다.
SELECT empName, salary
FROM employee
WHERE salary > AVG(salary)
-- 평균 급여보다 많이 받는 사원을 조회
SELECT empName, salary
FROM employee
-- where salary > avg(salary); 집계함수는 where절에서 사용할 수 없다.
WHERE salary > (SELECT AVG(salary)
FROM employee);
위와 같이 집계함수 단독으로는 WHERE절 안에 입력할 수 없으므로, 서브쿼리로 작성한다.
: 서브쿼리에서 조회되는 결과값이 하나이상의 행일 때 사용하는 쿼리이다.
다중행 서브쿼리는 다중행 연산자와 함께 사용한다.
다중행 연산자
- IN : 메인 쿼리의 비교조건이 서브쿼리의 결과 중에 하나라도 일치하면 참
- ALL : 메인 쿼리의 비교조건이 서브쿼리의 결과와 모든 값이 일치하면 참
- ANY, SOME : 메인 쿼리의 비교조건이 서브쿼리의 검색 결과와 하나 이상이 일치 하면 참
- EXISTS : 메인 쿼리의 비교조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참
강의: ms sql 2014 제대로 배우기 1