SQL 구문이 실행을 완료한 후 데이터베이스 서버가 서브쿼리 결과에 할당된 메모리를 해제한다.
비상관 서브쿼리 - 독립적으로 실행되는 서브쿼리
select city_id, city
from city
where country_id <>
(select country_id from country where country = 'India');
상관 서브쿼리 - 하나 이상의 열을 참조하는 포함 구문에 의존적인 서브쿼리
따라서 포함 구문이 실행되기 전까지 실행되지 않는다.
select c.first_name, c.last_name
from customer c
where 20 =
(select count(*) from rental r
where r.customer_id = c.customer_id);
주의할 점은 포함 쿼리의 각 행에 대해 한 번씩 실행되므로, 포함 쿼리가 많은 행을 반환할 경우 성능 문제가 발생할 수 있다.
상관 서브쿼리는 다음과 같이 update, delete, insert 문에서도 자주 사용된다.
update customer c
set c.last_update =
(select max(r.rental_date) from rental r
where r.customer_id = c.customer_id);
서브쿼리를 select, from, where 절 뿐만 아니라 having, order by 절에서도 사용할 수 있다.
select a.actor_id, a.first_name, a.last_name
from actor a
order by
(select count(*) from film_actor fa
where fa.actor_id = a.actor_id) desc;