Oracle, Tibero 에서 정렬/개수 제한 함께 사용하기

seulg1004·2024년 2월 14일
0

RDBMS 뽀개기

목록 보기
1/5

정렬된 Row 중 상위 몇 개만 SELECT 할 경우에 참고할 내용이다.

이에 앞서서, SELECT 쿼리의 실행순서를 익히고 가야한다.

  • 실행 순서
    FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → TOP

Mssql의 top 키워드

Mssql 에서는 top 키워드를 활용해 정렬 -> 개수 제한을 구현한다.

SELECT top 1 * /* 세번째 */
FROM dbo.T_TABLE /* 첫번째 */
ORDER BY REG_DTTM DESC /* 두번째 */

top 키워드는 Mssql 에서 가장 늦게 실행되기 때문에 원하는 대로 구현이 가능하다.

Oracle, Tibero에서 사용 ⛳️

Oracle, Tibero 에는 애석하게도 top 키워드가 없다..
ROWNUM을 활용하여야 하는데 실행 순서가 ORDER BY 보다 앞서므로 다른 묘안이 필요하다.

SELECT * /* 세번째 */
FROM T_TABLE /* 첫번째 */
WHERE ROWNUM = 1 /* 두번째 */
ORDER BY REG_DTTM DESC /* 네번째 */

위와 같이 작성하면 의도한대로 결과가 나오지 않고, 개수 제한 -> 정렬 순서로 구현된다.

따라서 아래와 같이 쿼리를 중첩해서 사용하는 방법이 가장 대중적으로 알려져 있다.

SELECT *
FROM (
	SELECT *
    FROM T_TABLE
    ORDER BY REG_DTTM DESC
) WHERE ROWNUM = 1

이렇게 해주면 먼저 내부 쿼리에서 정렬한 뒤, 바깥 쿼리에서 개수 제한을 하게 된다.

0개의 댓글

관련 채용 정보