다음 SQL 의 실행 결과로 옳은 것은? (EXCEPT 는 Oracle… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 SQL 의 실행 결과로 옳은 것은? (EXCEPT 는 Oracle 의 MINUS 와 같다)[계약]
| 계약번호 | 고객번호 | 상품코드 |
|---|---|---|
| 1 | C1 | P1 |
| 2 | C1 | P1 |
| 3 | C1 | P2 |
| 4 | C2 | P1 |
| 5 | C3 | (null) |
| 6 | C4 | P3 |
[청구]
| 청구번호 | 고객번호 | 상품코드 |
|---|---|---|
| 1 | C1 | P2 |
| 2 | C2 | P1 |
| 3 | C3 | (null) |
| 4 | C5 | P3 |
SELECT 고객번호, 상품코드 FROM 계약 EXCEPT SELECT 고객번호, 상품코드 FROM 청구 ORDER BY 고객번호, 상품코드;
1
| 고객번호 | 상품코드 |
|---|---|
| C5 | P3 |
2
| 고객번호 | 상품코드 |
|---|---|
| C1 | P1 |
| C4 | P3 |
3
| 고객번호 | 상품코드 |
|---|---|
| C1 | P1 |
| C1 | P1 |
| C4 | P3 |
4
| 고객번호 | 상품코드 |
|---|---|
| C1 | P1 |
| C3 | (null) |
| C4 | P3 |
해설
EXCEPT(MINUS) 는 위 결과에서 아래 결과에 있는 행을 빼고 중복을 제거하므로 (C1, P1) 과 (C4, P3) 두 행만 남는다.
(C1, P2)·(C2, P1)·(C3, NULL) 은 청구에도 있어 빠지는데, 집합 연산은 NULL 끼리를 같은 값으로 비교한다.
- (C1, P1) 을 두 행 남긴 표는 EXCEPT ALL 처럼 중복을 유지한 결과이다.
- (C3, NULL) 을 남긴 표는 NULL 끼리를 다른 값으로 본 오해이다.
- (C5, P3) 만 있는 표는 두 SELECT 의 순서를 바꿔 청구에서 계약을 뺀 결과이다.
오류나 개정된 내용이 보이면 알려주세요