정렬된 Row 중 상위 몇 개만 SELECT 할 경우에 참고할 내용이다.
이에 앞서서, SELECT 쿼리의 실행순서를 익히고 가야한다.
Mssql
에서는 top 키워드를 활용해 정렬 -> 개수 제한을 구현한다.
SELECT top 1 * /* 세번째 */
FROM dbo.T_TABLE /* 첫번째 */
ORDER BY REG_DTTM DESC /* 두번째 */
top 키워드는 Mssql
에서 가장 늦게 실행되기 때문에 원하는 대로 구현이 가능하다.
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
이렇게 해주면 먼저 내부 쿼리에서 정렬한 뒤, 바깥 쿼리에서 개수 제한을 하게 된다.