PostgreSQL、Mysql中limit使用方法比较
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据。一般数据库管理系统都会提供这些功能,但是各个DBMS提供的查询方法又有些不一样。下面主要介绍Mysql和PostgreSQL在使用limit查询其中几行数据的区别。
Mysql:
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初 始记录行的偏移量是 0(而不是 1)。
为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。具体举例:
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行//换句话说,LIMIT n 等价于 LIMIT 0,n。
PostgreSQL:
如果给出了一个限制计数,那么返回不超过那么多的行。(但可能更少些,因为查询本身可能生成的行数就比较少。) LIMIT ALL 和省略 LIMIT 子句一样。
//b为起始值(不包括b),a为获取数据长度。
SELECT * FROM table LIMIT a OFFSET b ;
//举例:检索记录行6-15
SELECT * FROM table LIMIT 10 OFFSET 5;
//如果只给定一个参数,它表示返回最大的记录行数目:
SELECT * FROM table LIMIT 5; //和Mysql用法一样;
//也就是说“OFFSET 说明在开始返回行之前忽略多少行。 OFFSET 0 和省略 OFFSET 子句是一样的。”
当然如果使用LIMIT,那么用ORDER BY 子句把结果行约束成一个唯一的顺序是一个好主意。否则你就会拿到一个不可预料的该查询的行的子集。