[SQL] 4-2 서브 쿼리 (subquery)
서브쿼리(subquery)는 SQL문을 실행하는 데 필요한 데이터를 추가로 초회하기 위해 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다.
서브쿼리를 포함하고 있는 쿼리를 메인쿼리(main query)라고 부르며,
(subquery = inner query / main query = outer query)
서브쿼리는 반드시 괄호(())로 감싸져 있어야 한다.
서브쿼리의 특징
- 알려지지 않은 기준을 이용한 검색에 유용
- 메인 쿼리가 실행되기 이전에 한번만 실행
- 한 문장에서 여러번 사용 가능
SELECT *
FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 이름='John');
사원 John의 급여보다 높은 사원을 조회하고 싶을 때
→ 사원 John의 급여를 알지 못해도, 서브쿼리를 이요하여 검색 가능
서브쿼리 사용시 주의사항
- 서브쿼리는 괄호와 함께 사용되어야 한다.
- 서브쿼리 안에서 ORDER BY 절은 사용할 수 없다.
- 서브쿼리는 연산자의 오른쪽에 사용되어야 한다.
- 서브쿼리는 오로지 SELECT문으로만 작성 할 수 있다.
서브쿼리의 분류
반환 값의 개수에 따라
-
단일 행 서브쿼리 (1개)
- =, <>, <, >, <=, >=
-
다중 행 서브쿼리 (2개 이상)
기호 뜻 예시 IN 하나라도 만족하면 반환 1 IN(1, 2, 3, 4) ANY 하나라도 만족하면 반환
비교 연산 가능10 < ANY(1, 2, 3, 4) ALL 모두 만족하면 반환
비교 연산 가능99 >= ALL(99, 100, 101)
서브쿼리의 위치에 따라
-
일반 서브쿼리 (WHERE)
-
스칼라 서브쿼리 (SELECT)
SELECT 절에서 사용하는 서브쿼리, 스칼라 서브쿼리는 오로지 한 행만 반환한다. 마치 JOIN을 사용한 것과 같은 결과를 나타낸다.
SELECT students.name, ( SELECT math FROM middle_test as m WHERE m.student_id = students.student_id ) AS middle_avg FROM students;
댓글남기기