문제
다음 두 테이블이 있다. 아래 SQL문의 실행 결과로 반환되는 값은 무엇인가?
[Tbl_A]
| A | B | C | D |
|---|---|---|---|
| 1 | a | x | 1 |
| 2 | a | z | 1 |
| 2 | a | y | 2 |
| 3 | b | y | 2 |
[Tbl_B]
| D | E | F |
|---|---|---|
| x | D | 5 |
| y | E | 6 |
| z | E | 9 |
① 1 ② 2 ③ 3 ④ 4
정답
2번
해설
정답: 2. 내부 인라인뷰가 (A,B) 조합 2건을 반환하므로 COUNT(*) 는 2 이다.
오답 풀이
- ①: 1건이 아니다. 조건을 만족하는 서로 다른 (A,B) 조합이 2개다.
- ②: 정답. 아래 단계 추적 참조.
- ③: 3건이 아니다. DISTINCT 로 (2,a) 의 중복이 1건으로 합쳐진다.
- ④: 원본 행 수(4)이지, 조건·DISTINCT 적용 후 건수가 아니다.
보충 개념 단계 추적: ①Tbl_B 에서 UPPER(E)='E' 인 행 → (y,E),(z,E) 이므로 D 값 집합 = {y, z}. ②Tbl_A 에서 C IN ('y','z') 인 행 → (2,a,z),(2,a,y),(3,b,y) 3건. ③SELECT DISTINCT A,B → (2,a),(3,b) 2건. ④바깥 COUNT(*) = 2. 서브쿼리는 안쪽부터 평가되며 IN 절은 반환된 값 집합과의 포함 여부를 본다.