데이터베이스 기초
고객 표(고객ID, 이름)에는 (C1, 아오키), (C2, 이노우에), (C3, 우에다), (C4, 에토)의 4개 행이 있다. 주문 표(주문ID, 고객ID, 금액)에는 (O1, C1, 3000), (O2, C2, 8000), (O3, C1, 6000), (O4, C3, 2000), (O5, C2, 9000)의 5개 행이 있다. SELECT 이름 FROM 고객 WHERE 고객ID IN (SELECT 고객ID FROM 주문 WHERE 금액 > 5000)의 결과는 몇 행이 되는가?
- A1행
- B2행
- C3행
정답과 해설 보기
정답: B. 2행
먼저 괄호 안의 부질의(서브쿼리)가 금액이 5000을 넘는 주문의 고객ID를 반환합니다. 해당하는 것은 O2(C2), O3(C1), O5(C2)의 3건이므로 고객ID의 모음은 C2, C1, C2입니다. 바깥 질의는 고객 표의 각 행에 대해 고객ID가 이 모음에 포함되는지를 조사합니다. 포함되는 것은 아오키(C1)와 이노우에(C2)이며, 이노우에는 모음에 두 번 나타나도 고객 표의 한 행으로서 한 번만 반환되므로 결과는 2행입니다. 3행은 고객 표와 주문 표를 조인한 뒤 금액으로 좁힌 경우처럼, 해당하는 주문의 건수만큼 행이 생긴다고 생각한 경우의 수입니다. 1행은 모든 주문이 5000을 넘는 고객(이노우에)만 센 경우의 수입니다.