문제
다음 [T1] 테이블에 대하여 아래 SQL 문을 실행했을 때, 출력되는 데이터의 순서로 가장 적절한 것은? (Oracle 기준)
<T1>
| COL1 | COL2 | COL3 |
|---|---|---|
| A001 | 2024-12-15 | 110 |
| A002 | NULL | 110 |
| B001 | 2024-12-01 | 120 |
| C001 | 2024-12-20 | 130 |
| D001 | 2024-12-03 | 110 |
① D001, A001, A002, B001, C001 ② A001, A002, D001, B001, C001 ③ A002, A001, D001, C001, B001 ④ D001, A002, A001, B001, C001
정답
1번
해설
정답: 1. 1차 정렬키 COL3 ASC 로 110 그룹(A001, A002, D001)이 먼저 오고, 그 안에서 2차 정렬키 COL2 ASC 로 12-03(D001) → 12-15(A001) → NULL(A002) 순으로 정렬된다(Oracle ASC 는 NULL 을 마지막에 둔다). 이어서 COL3 가 120 인 B001, 130 인 C001 이 온다.
오답 풀이
- ①: 정답. COL3=110 그룹 내에서 COL2 오름차순(12-03, 12-15, NULL 후순위) → D001, A001, A002 순, 이어서 COL3 가 큰 B001, C001.
- ②: COL3=110 그룹 안에서 COL2 가 가장 이른 12-03(D001)이 맨 앞에 와야 하는데 그룹의 맨 뒤에 놓여 COL2 ASC 순서와 어긋난다.
- ③: NULL 인 A002 를 맨 앞에 두어 Oracle ASC 의 NULL 후순위 원칙과 어긋나고, 110 그룹 안에서도 12-15(A001) 가 12-03(D001) 보다 앞서며, COL3 이 120 인 B001 과 130 인 C001 의 순서까지 뒤바뀌었다.
- ④: 같은 110 그룹 내에서 NULL(A002) 이 12-03(D001) 다음에 와 12-15(A001) 보다 앞서므로 COL2 ASC 순서와 어긋난다.
보충 개념 ORDER BY 는 앞쪽 키부터 우선 적용하고, 값이 같은 그룹 내에서만 다음 키로 정렬한다. Oracle 은 ASC 정렬 시 NULL 을 가장 큰 값처럼 취급해 맨 뒤(NULLS LAST), DESC 시 맨 앞(NULLS FIRST)에 둔다.