더북(TheBook)

코드 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 절의 조건이 없어서) 오류가 난 것이죠. 이처럼 스칼라 서브쿼리가 반환하는 결과 집합은 단일 값, 단일 로우여야 합니다. 이를 위반하면 오류가 발생합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.