원하는 갯수만큼 결과값 가져오기?? 0 10 10,505

by 손님 [SQL Query] rownum 쿼리 [2010.03.25 10:57:48]


혹시나 하는 마음에 질문올립니다.

예를 들어
Select * from Test 라고 쿼리를 가져오는데요..
특정 5번째 row의 값만 가져올수 있나요?

Ms-SQL 에서
Select top 1 * from Test 가
오라클에서는
Select * from Test where rownum < 1이라고 어디서 봤습니다.

혹시
 Select * from Test where 5>rownum >3 이건 안되나요??
그럼 4번째 row 값을 가져오지는 않나요?? 알려주세요~

by 이재현 [2010.03.25 10:59:03]
;; 혹시 이거요?

SELECT * FROM TEST WHERE ROWNUM = 5??


by 이재현 [2010.03.25 10:59:38]
SELECT * FROM TEST WHERE ROWNUM = 5

by home010 [2010.03.25 11:02:58]
row 1일 경우는

WHERE ROWNUM = 1

로 사용하지만 1이상일경우는

WHERE ROWNUM <= 5

로 하면 될 듯 한데요

by 현 [2010.03.25 11:05:25]
일단 5번째 로우의 의미가 무엇인지가 중요합니다.
테이블에 데이터가 정렬되어서 들어가 있는 것이 아니기 때문에
조회할 때마가 값이 다를 수 있습니다.
아무 값이나 나와도 된다면 꼭 5번째가 아니라 아무 값이나 하나 나오면 되겠죠.

만약 인덱스 스캔을 해서 순서대로 가져 오시고 싶으시다면 방법은 있죠.
그렇지만 쿼리를 저렇게 해서는 안되겠죠...인덱스를 탈 수 있게 만드셔야 할테구요..
정확히 원하시는 것이 무엇인지 모르겠습니다.

ROWNUM은 가상 컬럼이기 때문에 5>rownum >3 이런건 되지 않습니다.

by 현 [2010.03.25 11:06:07]
재현님..

자꾸 엉터리로 답글 다실래요??

by 마농 [2010.03.25 11:06:45]
SELECT *
FROM
(
SELECT ROWNUM rn, t.*
FROM test
WHERE ROWNUM <= 5
)
WHERE rn = 5
;

by 이재현 [2010.03.25 11:15:29]
현님 엉터리인가요??

테스트는 안해봤는데 안데나 ..ㅜㅜ

by 이재현 [2010.03.25 11:17:46]
ㅋㅋㅋㅋ

죄송합니다 ㅠ 넘 쉽게 생각했나 ㅠ 죄송합니다.

SELECT *
FROM (
SELECT ROWNUM RN, TABLE_NAME,COMMENTS FROM DICT
WHERE ROWNUM <= 5
)
WHERE RN = 5

by v상이v [2010.03.25 11:24:00]
추가로 혹시 특정 5번째 row라면 ROWNUM 으로 가져오는것은 현님 말씀대로
매번 같은 값을 가져오진 않습니다.

정말 '특정' 5번째 값이라면 마농님 답변에 정렬만 추가하셔서 특정5번째 값을 가져오시면 대겠구요...

단지 아무값이나 하나가 필요한 것이라면...

SELECT *
FROM Test SAMPLE(1)
WHERE rownum = 1

이렇게 하는 방법도 있습니다...

by 패대기 [2010.03.25 12:53:49]
특정부분을 정렬 시키고 난 후에 rn을 붙여주고나서 해당 필드를 붙여야 하지 않을까요?
SELECT *
FROM
SELECT ROWNUM rn, a.*
FROM (
SELECT a.*
FROM test a
ORDER BY :col
) a
) a
WHERE a.rn = 5 ;
또는
SELECT *
FROM (
SELECT row_number() over(ORDER BY :col) rn, a.*
FROM test a
) a
WHERE a.rn = 5
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입