仅显示SQL查询的前N行输出

pac*_*man 20 sql

有没有办法只显示SQL查询的前N行输出?
奖励点,如果N输出行后查询停止运行.

我最感兴趣的是找到适用的东西Oracle.

Rut*_*ani 46

如果指定要定位的数据库,将会很有帮助.不同的数据库有不同的语法和技术来实现这一点:

例如在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行的逻辑.


小智 12

对于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; 
Run Code Online (Sandbox Code Playgroud)

上面的示例来自http://www.adp-gmbh.ch/ora/sql/examples/first_rows.html,该讨论对此主题进行了很好的讨论.


Oli*_*ons 6

我知道它与MySQL,但我不知道它是否是标准的SQL:以"limit X"结束查询,X = n.你想要的线条.

示例:

SELECT NAME FROM EMPLOYEES ORDER BY SALARY DESC LIMIT 10;

  • LIMIT不是标准的,尽管它相当普遍.出于某种原因,SQL:2008标准采用了FETCH FIRST的DB2方法,尽管很少有其他产品实现这一点....有关详细信息,请参阅http://troels.arvin.dk/db/rdbms/#select-limit . (2认同)