Ограничение числа возвращаемых строк
Требуется ограничить число возвращаемых запросом строк. Порядок не имеет значения; подойдут любые n строк.
Решение
В Oracle ограничение на количество возвращаемых строк накладывается с помощью функции ROWNUM в предикате WHERE:
select e.* from emp e where rownum
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- ---------- --- --------- --- ---- ------ 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
Обсуждение
Для ограничения числа возвращаемых строк в Oracle приходится использовать функцию ROWNUM, возвращающую порядковый номер каждой строки результирующего множества (возвращающую, начиная с 1, величину).
Рассмотрим, то происходит при использовании ROWNUM
- Oracle выполняет запрос.
- Oracle извлекает первую строку и называет ее строкой номер 1.
- Номер строки больше 5? Если нет, Oracle возвращает строку, потому что она отвечает критерию: ее порядковый номер меньше или равен 5. Если да, Oracle не возвращает строку.
- Oracle извлекает следующую строку и присваивает ей слудущий порядковый номер по возрастанию (2, затем 3, затем 4 и т.д.).
- Переходим к шгу 3.
Как видно из данного процесса, присвоение значений, возвращаемых функцией ROWNUM, происходит после извлечения очередной строки. Это очень важно и является ключевым моментом. Многие разработчики на Oracle пытаются реализовать извлечение только, скажем, пятой возвращенной запросом строки, задавая ROWNUM = 5. Такое использование условия равенства в сочетании с ROWNUM является неверным. При попытке возвратить пятую строку с помощью ROWNUM = 5 роисходит следующее:
- Oracle выполняет запрос.
- Oracle извлекает первую строку и называет ее строкой номер 1.
- Номер строки равен 5? Если нет, Oracle отбрасывает строку, потому что она не отвечает заданному критерию. Если да, Oracle возвращает строку. Но ответ всегда будет отрицательным!
- Oracle извлекает следующую строку и называет ее строкой номер 1, поскольку первая возвращенная запросом строка должна быть пронумерована как первая строка.
- Переходим к шагу 3.
После тщательного разбора этого процесса становится понятно, почему использование ROWNUM = 5 не обеспечивает возвращения пятой строки. Невозможно получить пятую строку, не возвратив перед этим строки с первой по четвертую!
Однако заметьте, что с помощью ROWNUM = 1 можно получить первую строку. Может показаться, что это противоречит приведенному выше объяснению. Причина, почему ROWNUM = 1 обеспечивает возвращени первой строки, в том, что Oracle для определения наличия строк в таблице приходится извлекать, по крайней мере, одну из них. Внимательно проанализируйте предыдущий процесс, подставив 1 вместо 5, и вы поймете, почему для возвращения одной строки можно в качестве условия задавать ROWNUM = 1.
Tags: Ограничение числа возвращаемых строк
PL/SQL
tags: Администрирование Oracle DataBase || SQL & PL/SQL
Исходные коды проекта хранятся на github. Можете заводить Issue и Discussions, при необходимости.
Чтобы задать вопрос, добавить свои знания, исправить ошибки и неточности, пишите в телеграм чате.
SQL оператор SELECT LIMIT
В этом учебном материале вы узнаете, как использовать оператор SELECT LIMIT в SQL, с синтаксисом и примерами.
Описание
SQL оператор SELECT LIMIT используется для извлечения записей из одной или нескольких таблиц в базе данных и ограничения количества возвращаемых записей на основании предельного значения.
Подсказка: SELECT LIMIT поддерживается не во всех базах данных SQL.
Для баз данных, таких как SQL Server или MSAccess, используйте оператор SELECT TOP, чтобы ограничить свои результаты. Оператор SELECT TOP является патентованным эквивалентом оператора SELECT LIMIT.
Синтаксис
Синтаксис для оператора SELECT LIMIT в SQL.
SELECT expressions
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
LIMIT number_rows [ OFFSET offset_value ];
Параметры или аргумент
expressions Столбцы или расчеты, которые вы хотите получить tables Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица WHERE conditions Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны ORDER BY expression Необязательный. Он используется в операторе SELECT LIMIT, чтобы вы могли упорядочить результаты и выбрать те записи, которые вы хотите вернуть. ASC - возрастающий порядок, а DESC - убывающий LIMIT number_rows Он указывает ограниченное количество строк в наборе результатов, которые должны быть возвращены на основе number_rows . Например, LIMIT 10 вернет первые 10 строк, соответствующих критериям SELECT. Именно здесь важен порядок сортировки, поэтому обязательно используйте предложение ORDER BY соответствующим образом OFFSET offset_value Необязательный. Первая строка, возвращаемая LIMIT, будет определена offset_value
Пример - использование ключевого слова LIMIT
Давайте посмотрим, как использовать оператор SELECT с опцией LIMIT в SQL.
Например.
Ограничение количества строк LIMIT
Конструкция LIMIT позволяет получить только часть строк от результата запроса.
Применяя LIMIT , важно использовать также предложение ORDER BY , чтобы строки результата выдавались в определённом порядке. Иначе будут возвращаться непредсказуемые подмножества строк. Вы можете запросить строки с десятой по двадцатую, но какой порядок вы имеете в виду? Порядок будет неизвестен, если не добавить ORDER BY .
Например, получим 3 первых магазина в алфавитном порядке:
SELECT store_id, name FROM store ORDER BY name LIMIT 3
| # | store_id | name |
|---|---|---|
| 1 | 900 | Big |
| 2 | 600 | Umi |
| 3 | 300 | Адалин |
Как ограничить количество выводимых строк?

Подскажите, как ограничеть количество выводимых строк?
Например мне надо вывести 10 самых дешевых продуктов.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как ограничить кол-во выводимых строк при выполнении запроса?
В FAQ предлагается так ограничивать кол-во данных запроса напр до 100 зарисей sql='SELECT * FROM.
Ограничить количество выводимых постов?
Выводятся посты. <?php if ( have_posts() ) : ?> Как можно ограничить, чтобы например только 3.
Можно ли ограничить количество выводимых результатов используя xpath
Можно ли ограничить количество выводимых результатов используя xpath?
Ячейка в DataDridView: ограничить количество выводимых знаков после запятой
Подскажите пожалуйста, где в конструкторе изменить тип ячейки на числовой, с учетом ограничения.
Регистрация: 05.04.2007
Сообщений: 55
Если имеется ввиду как из БД выводить ограниченные записи в какой-нибудь Грид, то это можно сделать при помощи SQL запроса
Data1.RecordSource='Select Field1,Field2 From Table Where Field2 Data1.Refresh
где Field1,Field2 поля в таблице Table и в Field2 записаны цены, так вот в Грид , который связан с БД через DaraSource отобразятся все записи у которых цена меньше 500, это для БД, если имелось ввиду что-то другое, то поясни
Удачи