컴퓨터연구소
338
2022-08-06 14:08:22
3
111

SQL 질문입니다.


안녕하세요?


오라클이나 MS DB에 100만건의 레코드를 가진 테이블 A가 있을때


이것을 프로그램에서 10만건씩 SELECT하고 싶으면 어떻게 쿼리를 날려야 할까요?


SELECT TOP(100000) * FROM 테이블A 

이렇게하면 상위 10만건은 가지고 오는데 그다음 10만1번째에서 ~ 20만건 부분 가져올려면 쿼리를 어떻게 날리나요?


답변감사하고 즐거운 주말보내세요.



0
  • 답변 3

  • 시인들
    2k
    2022-08-06 15:00:44 작성 2022-08-06 15:26:44 수정됨

    이거연?;; 왠만하면 TOP보다능 offset 으롱 하시는 걸 추천드려연;;


    100001~200000건


    slect TOP 100000 * FROM 테이블 WHERE 인덱스필드 NOT IN
    (
             SELECT   TOP ((2 - 1) * 100000) 인덱스필드
             FROM     테이블
             ORDER BY 인덱스필드 DESC ) ORDER BY 인덱스필드 DESC


    200001~300000건


    slect TOP 100000 * FROM 테이블 WHERE 인덱스필드 NOT IN
    (
             SELECT   TOP ((3 - 1) * 100000) 인덱스필드
             FROM     테이블
             ORDER BY 인덱스필드 DESC) ORDER BY 인덱스필드 DESC


    OFFSET 방식


    SELECT *
    FROM 테이블 A WITH(NOLOCK)
    OFFSET (1-1) * 100000 ROWS
    FETCH NEXT 100000 ROWS ONLY
    


  • 컴퓨터연구소
    338
    2022-08-06 15:36:50

    시인들님 답변감사합니다.


    OFFSET방식으로 써보겠습니다.

    근데 위의 두 쿼리는 컬럼을 써야하는것 같던데

    테이블이 매번 달라져서 컬럼을 알수 없는 상황일때는 방법이 따로 없을까요?


    레코드100만개짜리 테이블이 여러개있고 컬럼이 전부 다 다를경우... 

  • 컴퓨터연구소
    338
    2022-08-11 15:28:09

    늦게나마 감사의 말씀을 전합니다.


    OFFSET 쿼리문 그대로 복사해서 사용하니 잘되네요.


    시인들님 정말 감사합니다 .

  • 로그인을 하시면 답변을 등록할 수 있습니다.