서브쿼리란 부모 쿼리 안에 작성하는 내부의 SELECT 쿼리이며, 주로 부모 쿼리의 FROM과 WHERE의 조건으로 사용됩니다. 서브쿼리라고 특별한 문법이 있는게 아니라, SELECT를 괄호 ()로 묶어서 가독성을 높입니다.
DELETE FROM items WHERE id = (SELECT MIN(id) FROM products);
가장 작은 id를 조회한 데이터를 부모 쿼리의 조건절에서id 값으로 활용하는 예제
DELETE FROM items WHERE id = ()
(SELECT MIN(id) FROM products
서브 쿼리의 결과를 Items 테이블에 추가하는 예제.
INSERT INTO items (SELECT * FROM products);
서브 쿼리는 사용되는 위치에 따라 종류를 나눠볼 수 있습니다.
1) 서브 쿼리 위치에 따른 분류
2) 중첩 서브쿼리 - 서브쿼리 반환에 따른 분류
3) 서브쿼리가 파싱되는 관점에 따른 분류
일반적으로 join 연산이 서브쿼리 연산보다 성능이 좋기 때문에, 서브쿼리는 join으로 바꿀 수 있으면 성능 측정 과정을 통해 바꾸는 것이 좋습니다.