본문 바로가기

Backend/SQL

[프로그래머스_SQL] 상위 n개 레코드 LIMIT, ROWNUM

 

MySQL

SELECT NAME
FROM ANIMAL_INS 
ORDER BY DATETIME
LIMIT 1;

MySQL은 LIMIT을 이용해서 처리할 수 있습니다.

 

Oracle

SELECT NAME
FROM (
    SELECT NAME
    FROM ANIMAL_INS 
    ORDER BY DATETIME ASC
)
WHERE ROWNUM <= 1;

Oracle은 ROWNUM을 이용해서 처리할 수 있습니다.

 

LIMIT과 ROWNUM은 언뜻 보면 같아 보이지만, 동작에서 큰 차이가 있습니다.

예를 들어, LIMIT은 ORDER BY 실행 후 결과를 제한합니다. 하지만, ROWNUM은 ORDER BY 실행 전에 번호가 매겨지므로, 정렬된 결과에서 행을 제한하려면 서브쿼리를 사용해야 합니다.

-- MySQL
SELECT * FROM table LIMIT 10;  -- 상위 10개
SELECT * FROM table LIMIT 5, 10;  -- 6번째부터 10개

-- Oracle
SELECT * FROM table WHERE ROWNUM <= 10;  -- 상위 10개
SELECT * FROM (
  SELECT a.*, ROWNUM AS rnum 
  FROM table a
) WHERE rnum BETWEEN 6 AND 15;  -- 6번째부터 10개