【问题标题】:What is the SQL standard way to limit the number of return values?限制返回值数量的 SQL 标准方法是什么?
【发布时间】:2016-02-07 08:31:02
【问题描述】:

我试图找到限制选择查询返回值数量的标准方法,但在BNF 中找不到。每个 DBMS 似乎都定义了its own way。有标准方法吗?如果没有,为什么不值得标准化?

【问题讨论】:

  • this one 这里可能重复...
  • 许多产品在 SQL 标准指定 FETCH FIRST 语法之前实现了自己的版本。

标签: sql


【解决方案1】:

标准化的。

SQL 标准定义了以下语法:

select * 
from some_table
order by id
fetch first 42 rows only;

或者从与第一行不同的行开始:

select * 
from some_table
order by id
offset 42
fetch first 42 rows only;

这是在 SQL:2008 中引入的

但是,并非每个 DBMS 都支持此标准。实际上,没有任何 DBMS完全支持标准中定义的所有内容。有些人比其他人更忽视标准。

According to Wikipedia 以下 DBMS 支持此功能:

  • PostgreSQL (8.4)
  • 甲骨文 12c
  • IBM DB2
  • SQL Server 2012
  • HSQLDB 2.0
  • H2
  • CA DATACOM/DB 11
  • Sybase SQL Anywhere
  • EffiProz

【讨论】:

  • Mimer SQL 也支持它。
  • MS SQL Server 2012 也支持 OFFSET/FETCH。您可以在此处阅读有关限制行的标准和特定于供应商的方法:en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows
  • 我仍然无法在 BNF 中找到它作为 SELECT 声明的一部分。 FETCH 作为 data statement 的一部分出现在语法中,它是过程、触发器或游标的一部分,但不是基本 SELECT 的一部分。
  • @ceving:即SQL:2003,fetch first...是在SQL:2008中添加的
  • @a_horse_with_no_name 2008 语法在网络上的任何地方吗?
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2018-01-05
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多