프로그래ㅁㅓ스에서 1레벨 문제를 풀고 이따,,
(응애 인증해벌임 ㅋㅋㄹㅃㅃ)
상위 레코드를 뽑는것이 기억이 안나서 답변들을 보다가
MYSQL과 ORACLE의 풀이가 다른것을 확인했다,,, 이런부분에서도 차이점이 있었다니,,
나는 여기서 멈춰벌임,,,,
MYSQL에서는 LIMIT를 사용해서 원하는 갯수의 레코드를 뽑아 올 수 있지만
ORACLE에서는 LIMIT가 없기 때문에 ROWNUM을 사용한 풀이방법이 많아따,,
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
SELECT NAME
FROM (
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
)
WHERE ROWNUM = 1;
그래서 LIMIT 와 ROWNUM에 대해서 간단하게 정리해보아따.
쿼리 결과 개수를 제한할 수 있는 연산자.
LIMIT 로 지정하는 것은 '최대 행수' 이므로 테이블에 1개의 행만 있으면 LIMIT 3으로 해도 1개의 행만 반환한다.
SELECT 문의 마지막에 지정하는 것으로 WHERE, ORDER BY 뒤에 지정한다.
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명 LIMIT 행수
OFFSET 지정을 하게 되면 지정한 시작위치부터 행을 반환한다.
위치 지정은 시작행 -1
SELECT 열명 FROM 테이블명 LIMIT 행수 OFFSET 시작행
오라클에서 LIMIT를 사용한것과 같은 값을 내기 위해서는 SELECT절로 한번 감싼 후에 ROWNUM 조건을 주면 된다.
SELECT NAME FROM ( SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ) WHERE ROWNUM = 1;
원하는 구간의 행을 출력하기 위해서는 내부쿼리에서 순위함수를 사용하여 행의 번호를 지정한 다음 해당 번호의 구간을 잘라야 한다.
SELECT NAME FROM ( SELECT ROW_NUMBER() OVER (ORDER BY DATETIME) NUM, A.* FROM ANIMAL_INS A ORDER BY DATETIME ) WHERE NUM BETWEEN 3 AND 9;
ORDER BY가 필요 없다면 ROWNUM 키워드를 이용하여 행의 번호를 매길 수 있다.
SELECT NAME FROM ( SELECT ROWNUM NUM, A.* FROM ANIMAL_INS A ) WHERE NUM BETWEEN 3 AND 9;