SQL LIMIT 子句可以约束 SELECT 语句返回的行数。对于 SQL Server 或 MS Access 等 Microsoft 数据库,可以使用 SELECT TOP 语句来限制结果,这是 Microsoft 专有的 SELECT LIMIT 语句。但是,对于大多数关系数据库(DBMS),包括 MySQL/MariaDB、PostgreSQL 和 Oracle,SQL LIMIT 子句可以解决多个问题。在今天的文章中,我们将使用 Navicat for PostgreSQL 来探索其中的一些 LIMIT 的用法。
保持结果集易于管理
在许多生产和测试数据库中,表大小通常达到数百万行并且有数十列。因此,对数据库运行 SELECT * 查询绝不是一个好主意。将结果保持在一百或一千行可以将结果集保持在更易消化的大小。
Navicat 开发和管理工具默认自动限制结果集,以防止对数据库服务器造成过度负担。当打开表时,你可以看到它的运行情况。在应用程序窗口的底部,显示 Navicat 获取表行时运行的SQL。它以“LIMIT 1000 OFFSET 0”结束,这意味着只显示前 1000 条记录。
你可以在“记录”选项屏幕上更改默认要显示的记录数或关闭限制:
最前 N 个的查询
顾名思义,最前 N 的查询是那些试图从结果集中查找最前数目的记录的查询。这可能是最前 1 、最前 3 、最前 5 、最前 10 或最前 [任意] 数字。一些常见的例子是:
- 查找薪酬最高的前 10 名员工
- 查找盈利最多的前 20 名客户
- 查找系统中的前 3 个用户
仅使用 ORDER BY 和WHERE 子句而不使用 LIMIT 子句是很难处理这些查询。这是一个例子:
最前 5 个唯一的 Job ID
假设我们想在表中找到最前的唯一 Job ID。这是执行此操作的查询:
DISTINCT 关键字确保从结果中删除重复的 ID。
给定日期最接近的行
你可以使用 LIMIT 找到给定日期最接近的行。只需将行日期与给定日期进行比较,对结果进行排序,并将结果限制为你希望查看的行数。以下的查询返回 creation_date 大于 '2018-01-01' 的行:
在这种情况下,2018-01-02 是最接近的日期。
最后 N 个的查询
最前 N 个的查询的必然产物是是最后 N 个的查询。这是尝试从结果集中查找最后数目的记录的查询。我们可以很容易地将我们的“最前”查询转换为等效的“最后”查询!
最后 5 个唯一的 Job ID
若要返回最后 5 个唯一 Job ID,你需要做的就是删除 ORDER BY 子句中的 DESC 修饰符。默认情况下,这将按升序(ASC)顺序排序记录:
给定日期之前最接近的行
在给定日期之前找到最接近的行同样相当容易。我们只需要将大于 '>' 的运算符更改为小于 '<',并按降序(DESC)顺序重新排序结果:
总结
在今天的文章中,我们使用 Navicat for PostgreSQL 探索了 LIMIT 子句的一些用法。想试试 Navicat for PostgreSQL 吗?你可以完全免费试用它 14 天!