https://programmers.co.kr/learn/courses/30/lessons/59405
프로그래머스 상위 N개의 쿼리 조회하기 문제를 풀어보고 실수한 것을 공유합니다.
처음에는 단순하게 상위 N개를 조건문에 주고 ORDER BY를 하게 되면 결과가 나올 줄 알았기 때문에 이런 방식으로
문제를 풀었습니다.
SELECT NAME FROM ANIMAL_INS
WHERE ROWNUM < 2
ORDER BY DATETIME
그러나 전혀 엉뚱한 결과가 나왔습니다..
먼저 정답 부터 보겠습니다.
SELECT NAME
FROM
( SELECT * FROM ANIMAL_INS ORDER BY DATETIME)
WHERE ROWNUM < 2
이런 방식으로 조회를 해야 정답을 도출할 수 있습니다.
그 이유는 쿼리의 실행 방식때문입니다.
쿼리가 실행되는 순서는 FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY 순으로 실행됩니다.
첫 번째 쿼리의 실행 순서는 FROM ANIAML_INS 후에 WHERE ROWNUM을 실행하게 되겠죠?
즉 ODERER BY 이전에 ROWNUM이 실행되는 문제가 발생하니까 아래와 같은 방식으로 먼저 정렬을 한 레코드를 가져
온 후에 WHERE ROWNUM < 2 이 실행되는 방식으로 쿼리문을 작성해야 합니다.
'Oracle' 카테고리의 다른 글
다른 테이블을 참조하여 UPDATE 하는 방법 (0) | 2020.07.11 |
---|---|
서브쿼리의 종류와 WITH 쿼리 (0) | 2020.06.30 |
CHAR, VARCHAR, VARCHAR2 차이점 (2) | 2020.03.25 |
PLSQL - 필수 개념 정리 (0) | 2020.03.23 |
PL/SQL - DUAL TABLE (0) | 2020.03.18 |