결과를 보면 총 4편의 영화가 조회됐는데, 이 영화들은 2018년 최대 매출을 달성한 영화보다 매출액이 더 많다는 의미입니다.
앞의 쿼리처럼 단순 비교 연산자로 조건을 확인할 때, 조건 서브쿼리가 반환하는 값은 단일 값이어야 합니다. 여기서 단일 값이란 서브쿼리가 반환하는 로우와 칼럼이 1개라는 뜻입니다. 만약 로우 값이 2개 이상 반환되면 오류가 발생합니다.
코드 9-19
SELECT ranks, movie_name, sale_amt
FROM box_office
WHERE YEAR(release_date) = 2019
AND sale_amt >= (SELECT sale_amt
FROM box_office
WHERE YEAR(release_date) = 2018
AND ranks BETWEEN 1 AND 3);
실행결과
코드 9-19는 코드 9-18의 조건 서브쿼리 부분을 변경해 1~3위 영화의 매출액을 반환하게 합니다. 따라서 이 서브쿼리만 단독으로 실행하면 총 3건의 데이터가 조회됩니다. 하지만 코드 9-19 쿼리를 실행하면 서브쿼리가 1개 이상의 로우를 반환했다며 오류가 발생합니다. 즉, a.sale_amt 값이 서브쿼리 반환값보다 크거나 같은 조건을 확인하는데, 단일 값이 아닌 3개의 값이 조회되어 오류가 발생합니다. 이런 경우에는 어떻게 해야 할까요?