Oracle 데이터베이스 페이지 (3)

3599 단어 Oaclesql

1. 오 라 클 에서 SELECT TOP N 실현
        ORACLE 은 SELECT TOP 문 구 를 지원 하지 않 기 때문에 ORACLE 에 서 는 ORDER BY 와 ROWNUM 의 조합 으로 SELECT TOP N 의 조 회 를 실현 하 는 경우 가 많다.

SELECT   1...  n FROM
    (
        SELECT   1...  n FROM      ORDER  BY    1...  n
    )
    WHERE ROWNUM  <=  N(     )
    ORDER BY ROWNUM ASC 

SQL> select rownum, hs_login from 
          (
              select hs_login from t_users order by hs_login
           ) 
           where rownum < 5 order by rownum desc;

    ROWNUM HS_LOGIN
---------- --------------------------------------------------
         4 admin101
         3 admin100
         2 admin10
         1 admin1

Elapsed: 00:00:00.03

       
2. TOP N 기록 에서 M (M < = N) 조 기록 추출
        ROWNUM 은 기록 표 에 있 는 데이터 번호 의 숨겨 진 부분 이기 때문에 TOP N 개의 기록 을 얻 을 때 기 록 된 ROWNUM 을 동시에 추출 한 다음 에 이 N 개의 기록 에서 기록 번호 가 M 인 기록 을 추출 할 수 있다. 설령 우리 가 원 하 는 결 과 를 얻 더 라 도.

SELECT   1...  n FROM
     (
         SELECT ROWNUM RN,   1...  n FROM
         (
            SELECT   1...  n FROM    ORDER BY   1...  n
         )
         WHERE ROWNUM <= N(     )
         ORDER BY ROWNUM ASC
     )
     WHERE RN = M(M <= N)

SQL> select rownum, hs_login, hs_nick_name from
      (
         select rownum rn, hs_login, hs_nick_name from
            (
                select hs_login, hs_nick_name from t_users order by hs_login
            )
            where rownum < 5
            order by rownum desc
       )
      where rn = 3;

    ROWNUM HS_LOGIN      HS_NICK_NAME
---------- ------------- --------------
         1 admin100      Lcr Admin

Elapsed: 00:00:00.08

       
3. 제 M 조 기록 에서 시 작 된 X 조 기록 추출

SELECT   1...  n FROM
     (
        SELECT ROWNUM RN,   1...  nFROM
        (
           SELECT   1...  n FROM    ORDER BY   1...  n)
        )
        WHERE ROWNUM <= N (N = (M + X - 1))
        ORDER BY ROWNUM ASC
     )
     WHERE RN >= M

SQL> select rownum, hs_uuid, hs_login from
       (
           select rownum rn, hs_uuid, hs_login from
              (
                  select hs_login, hs_uuid from t_users order by hs_uuid
               )
               where rownum < 800
               order by rownum desc
       )
       where rn > 790;

    ROWNUM    HS_UUID HS_LOGIN
---------- ---------- --------------------------------------------------
         1        799 admin799
         2        798 admin798
         3        797 admin797
         4        796 admin796
         5        795 admin795
         6        794 admin794
         7        793 admin793
         8        792 admin792
         9        791 admin791

9 rows selected.

Elapsed: 00:00:00.12

         주의:
         우리 orderby 의 필드 는 hslogin 의 말 은 우리 가 원 하 는 효과 에 이 르 지 못 했 습 니 다. 설령 내 가 필드 hs 에 게login 에 색인 이 추가 되 었 습 니 다.하지만, 내 가 메 인 키 hs 를 사용 하면uid 시 우리 가 원 하 는 데 이 터 를 찾 을 수 있 습 니 다.
여기 서 는 좀 더 공부 해서 결론 을 내 려 야 하 는데, 그 원인 을 잠시 알 수 없다.
<>

좋은 웹페이지 즐겨찾기