Ограничение выборки

Функция

Определение максимального количества выбираемых записей выборки данных.

Спецификация
     
< ограничение выборки >::=
< начало выборки >::=
< количество записей >::=
неотрицательный целочисленный литерал | -1
< процент выборки >::=
неотрицательный целочисленный литерал
Синтаксические правила
  1. < Начало выборки > задает относительный номер (отсчет начинается с 0) записи выборки данных, начиная с которой должна выполняться выборка записей.

  2. Если < начало выборки > не задано, по умолчанию принимается значение 0. В конструкции FETCH FIRST < начало выборки > равно 0.

    Конструкция

    SELECT personid, model FROM auto LIMIT 0,7;

    эквивалента

    SELECT personid, model FROM auto LIMIT 7;
  3. < Количество записей > задает максимальное количество выбираемых записей выборки данных. < Количество записей >, равное -1, означает выбор записей выборки данных с < начала выборки > и до конца результата (в этом случае < начало выборки > является обязательным).

    select personid, model from auto limit 998,-1;
    | 999  | BUICK SKYLARK V8 |
    | 1000 | CHEVROLET IMPALA |
    
    Эти конструкции эквивалентны (выбираются все записи):
    select * from rank_tst limit -1;
    select * from rank_tst limit 0,-1;
    select * from rank_tst fetch first -1;
  4. Если < количество записей > равно 0, возвращается пустое множество записей выборки данных.

  5. < Процент выборки > – целочисленное положительное значение в диапазоне [0, 100] Значение < процента выборки > при необходимости округляется с избытком (например, 50% от 3-х записей будет равно 2-м записям).

  6. Конструкция LIMIT с одним аргументом задает максимальное количество возвращаемых записей выборки данных, т.е. конструкция LIMIT n эквивалентна LIMIT 0,n.

    Эти конструкции эквивалентны (выбирается 0 записей);
    select * from rank_tst limit 2;
    select * from rank_tst limit 0,2;
    select * from rank_tst fetch first 2;
Общие правила
  1. Если < количество записей > превышает объем выборки данных, то выдаются все записи выборки данных.

  2. При указании опции PERCENT выдается указанный процент от всех записей с < начала выборки >.

  3. Опция WITH TIES заставляет выбрать указанное число или указанный процент записей с < начала выборки >, включая все последние совпадающие записи в отсортированной выборке (требуется опции ORDER BY).

    create or replace table test (i int);
    insert into test values (1);
    insert into test values (2);
    insert into test values (3);
    insert into test values (3);
    insert into test values (3);
    
    select * from test order by i   select * from test order by i
     fetch first 3;                  fetch first 3 with ties;
    или                             или
    select * from test order by i   select * from test order by i
     fetch first 42 percent;         fetch first 42 percent with ties;
    I                               I
     -                               -
    |          1|                   |          1|
    |          2|                   |          2|
    |          3|                   |          3|
                                    |          3|
                                    |          3|
  4. Если < начало выборки > превышает реальный объем выборки, то выдаётся пустая выборка данных.

  5. Конструкция < ограничение выборки > применима ко всем подзапросам

    select model from auto where make in (select make from auto fetch first 5);
  6. Рекомендуется использовать ключевое слово LIMIT только в том случае, если предполагается, что выборка для запроса, в котором по сравнению с исходным запросом все внешние соединения заменены внутренними, должна быть непустой. Если же эта выборка может оказаться пустой, то рекомендуется либо не использовать ключевое слово LIMIT, либо использовать хинт /* +NOITER */.

Примеры
  1. select count(*) from auto;
    |1000 |
  2. select rowid, make, color from auto fetch first 2;
    | 1 | FORD   | BLACK |
    | 2 | ALPINE | WHITE |
  3. select rowid, make, color from auto where rowid >2 fetch first 3;
    | 3 | AMERICAN MOTORS | BROWN |
    | 4 | MASERATI        | BLACK |
    | 5 | CHRYSLER        | WHITE |
  4. select personid, model from auto limit 900,3;
    | PERSONID | MODEL             |
    | 901      | CADILLAC DE VILLE |
    | 902      | BUICK SKYLARK V8  |
    | 903      | CHEVROLET IMPALA  |
    
    create or replace table test (i int);
    insert into table values (1);
    insert into table values (2);
    insert into table values (3);
    insert into table values (4);
    insert into table values (5);
    
    select * from test fetch first 75 percent;
    I
     -
    |          1|
    |          2|
    |          3|
    |          4|
    
    select distinct make, model, cylnders from auto order by cylnders desc fetch
     first 1;
    select distinct make, model, cylnders from auto order by cylnders desc fetch
     first 1 with ties;
    select distinct make, model, cylnders from auto order by cylnders desc fetch
     first 10 percent;
    select distinct make, model, cylnders from auto order by cylnders desc fetch
     first 10 percent with ties;