Есть ли способ показать только первые N строк вывода из запроса SQL
? Бонусные точки, если запрос перестает работать после вывода строк N
.
Мне больше всего интересно найти что-то, что работает в Oracle
.
Есть ли способ показать только первые N строк вывода из запроса SQL
? Бонусные точки, если запрос перестает работать после вывода строк N
.
Мне больше всего интересно найти что-то, что работает в Oracle
.
Было бы полезно указать, какую базу данных вы хотите настроить. Различные базы данных имеют различный синтаксис и методы для достижения этого:
Например, в Oracle вы можете это сделать, поставив условие на RowNum
(select ... from ... where ... rownum < 11
→ приведет к выводу первых 10 записей)
В MySQL
вы можете использовать вы можете использовать предложение limit
.
Microsoft SQL Server = > SELECT TOP 10 column FROM table
PostgreSQL и MySQL = > SELECT column FROM table LIMIT 10
Oracle = > select * from (SELECT column FROM table ) WHERE ROWNUM <= 10
(благодаря стили)
Sybase = > SET rowcount 10 SELECT column FROM table
Firebird = > SELECT FIRST 10 column FROM table
ПРИМЕЧАНИЕ. Современные инструменты ORM
, такие как Hibernate, предоставляют API уровня высокого уровня (Query, Restriction, Condition), которые абстрагируют логику верхних n строк на основе выбранного вами диалекта.
Для Oracle предлагаемое и принятое решение неверно. Попробуйте использовать предложение порядка, и результаты будут непредсказуемыми. SQL должен быть вложен, чтобы выполнить это в Oracle.
select name, price
from (
select name, price, row_number() over (order by price) r
from items
)
where r between 1 and 5;
Приведенный выше пример был заимствован из http://www.adp-gmbh.ch/ora/sql/examples/first_rows.html, который хорошо обсуждает эту тему.
Я знаю это с MySQL, но я не знаю, является ли он стандартным SQL: завершите запрос "с ограничением X", X = n. линий, которые вы хотите получить.
Пример:
SELECT NAME FROM EMPLOYEES ORDER BY SALARY DESC LIMIT 10;
Для Oracle вы можете попробовать это
select /*+ FIRST_ROWS(10) */ * from table;