서브쿼리는 쿼리 안에 또 다른 쿼리가 조건문으로 포함이 된 것을 말한다. 서브쿼리는 메인쿼리의 조건문의 소괄호 안에 들어가 있어야 하고, 서브쿼리의 SELECT문은 하나의 컬럼만 가질 수 있다.
연습하면서 사용한 데이터셋은 캐글에 올라와있는 타이타닉 데이터 파일(csv)를 db에 넣고 사용해봤다.
SELECT Pclass, COUNT(Pclass)
FROM passenger
WHERE Id IN (
SELECT Id
FROM passenger
WHERE SibSp >= 2
)
GROUP BY Pclass;
위 쿼리문은 형제/자매가 둘 이상인 고객들의 Id를 조건으로 해당 고객들의 Pcalss를 조회하는 쿼리문이다.
추가적으로 서브쿼리는 다중행연산을 하므로 조건문에는 IN(하나만 만족해도 됨), ALL(모든 값 만족시켜야함), EXISTS(값 중 하나가 존재하면 됨) 을 사용할 수 있고, 서브쿼리가 없는 쿼리문은 단일행연산을 하므로 =, <, > 등을 사용한다.
단일행 연산을 하는 경우 조건문에는 AVG나 SUM 같은 함수는 쓸 수 없다.