코드 9-5를 실행하니 오류가 발생합니다. 오류 메시지에 ‘Operand should contains 1 column(s)’라고 나왔습니다. 왜 이런 오류가 났을까요?
오류 원인은 서브쿼리의 SELECT 절에 명시한 name과 continent 칼럼입니다. 스칼라 서브쿼리는 단일 값을 반환해야 하는데, 칼럼 2개가 명시되어 값을 2개 가져오니 오류가 발생한 거죠.
다른 예를 보죠.
코드 9-6
SELECT a.name, a.district, a.population, a.countrycode,
(SELECT b.name
FROM country b
) countryname
FROM city a;
실행결과
이번에도 실행하니 오류가 발생합니다. 오류 메시지를 보면 ‘Subquery returns more than 1 row’라고 나오죠. 서브쿼리가 반환하는 로우가 1개 이상이라는 뜻입니다. 코드 9-6의 서브쿼리는 코드 9-4의 서브쿼리와 비슷하지만, WHERE 절이 없습니다. 그래서 country 테이블에 있는 모든 건을 조회합니다. 원래 이 서브쿼리는 해당 도시의 국가명을 가져와야 하는데, 국가명 전체를 가져오게 했으니(WHERE 절의 조건이 없어서) 오류가 난 것이죠. 이처럼 스칼라 서브쿼리가 반환하는 결과 집합은 단일 값, 단일 로우여야 합니다. 이를 위반하면 오류가 발생합니다.