Показать только первые N строк вывода SQL-запроса - PullRequest
20 голосов
/ 17 мая 2009

Есть ли способ показать только первые N строк вывода из запроса SQL?
Бонусные баллы, если запрос перестает выполняться после вывода N строк.

Меня больше всего интересует поиск чего-то, что работает в Oracle.

Ответы [ 4 ]

46 голосов
/ 17 мая 2009

Было бы полезно, если вы укажете, на какую базу данных вы нацеливаетесь. Различные базы данных имеют разный синтаксис и методы для достижения этой цели:

Например, в 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 (спасибо stili)

Sybase => SET rowcount 10 SELECT column FROM table

Firebird => SELECT FIRST 10 column FROM table

ПРИМЕЧАНИЕ. Современные ORM инструменты, такие как Hibernate, предоставляют API высокого уровня (интерфейсы запросов, ограничений, условий), которые абстрагируют логику первых n строк на основе выбранного вами диалекта.

11 голосов
/ 17 мая 2009

Для 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 , в котором обсуждается эта тема.

6 голосов
/ 17 мая 2009

Я знаю это с MySQL, но я не знаю, является ли это стандартным SQL: закончить ваш запрос с «пределом X», X = n. строк, которые вы хотите получить.

Пример:

SELECT NAME FROM EMPLOYEES ORDER BY SALARY DESC LIMIT 10;

0 голосов
/ 30 марта 2016

Для Oracle, вы можете попробовать это

select /*+ FIRST_ROWS(10) */ * from table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...