문제
로그인 이력 테이블에서 사용자별 로그인 횟수를 집계하는 SQL에 대한 설명으로 적절하지 않은 것은?
SQLSELECT USER_ID AS ALIAS1, LOGIN_DATE AS ALIAS2, COUNT(*) AS LOGIN_CNT FROM LOGIN_HISTORY GROUP BY USER_ID, LOGIN_DATE ORDER BY ALIAS1, ALIAS2;
① 한 사용자가 5일간 하루 3회씩 로그인했다면 전체 로그인 이력은 15건이다. ② Oracle에서 SELECT 절의 별칭을 ORDER BY 절에서 사용할 수 있다. ③ ORDER BY ALIAS1, ALIAS2는 ALIAS1 기준으로 먼저 정렬한 뒤 ALIAS2 기준으로 정렬한다. ④ WHERE 절에서도 SELECT 절에서 정의한 ALIAS1을 항상 그대로 사용할 수 있다.
정답
4번
해설
정답: 4. SELECT 절에서 정의한 별칭은 일반적으로 WHERE 절에서 사용할 수 없다.
오답 풀이
- 1번: 5일 × 하루 3회 = 15건이므로 타당하다.
- 2번: Oracle에서 ORDER BY 절은 SELECT 별칭을 사용할 수 있다.
- 3번: ORDER BY에 여러 기준을 쓰면 앞 기준부터 차례대로 정렬한다.
- 4번: WHERE 절은 SELECT 절보다 논리적으로 먼저 처리되므로 SELECT 별칭을 일반적으로 사용할 수 없다.
보충 개념 SQL 논리 처리 순서상 WHERE는 SELECT보다 먼저 평가된다. 반면 ORDER BY는 SELECT 이후 결과를 정렬하므로 SELECT 절의 별칭을 사용할 수 있다.