SQL Limit子句

本教程我们将演示如何使用SQL LIMIT子句来限制SELECT语句返回的行数。

1. SQL LIMIT子句简介

要检索查询返回的行的一部分,请使用LIMITOFFSET子句。 以下说明了这些子句的语法:

SELECT 
    column_list
FROM
    table1
ORDER BY column_list
LIMIT row_count OFFSET offset;

在这个语法中,

  • row_count确定将返回的行数。
  • OFFSET子句在开始返回行之前跳过偏移行。 OFFSET子句是可选的。 如果同时使用LIMITOFFSET子句,OFFSET会在LIMIT约束行数之前先跳过偏移行。

在使用LIMIT子句时,使用ORDER BY子句确保返回的行按指定顺序非常重要。

并非所有数据库系统都支持LIMIT子句,因此,LIMIT子句仅在某些数据库系统中可用,例如MySQLPostgreSQLSQLite,Sybase SQL Anywhere和HSQLDB。

1. SQL LIMIT子句示例

我们将使用示例数据库中的employees表来演示LIMIT子句用法。

以下语句返回employees表中按first_name列排序的所有行。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name;

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         103 | Alexander  | Lee       |
|         115 | Alexander  | Su        |
|         114 | Avg        | Su        |
|         193 | Britney    | Zhao      |
|         104 | Bruce      | Wong      |
... ...
|         100 | Steven     | Lee       |
|         203 | Susan      | Zhou      |
|         106 | Valli      | Chen      |
|         206 | William    | Wu        |
+-------------+------------+-----------+
40 rows in set

如果要只返回前5行,请使用LIMIT子句,如以下语句。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 5;

执行上面查询语句,得到以下结果 -

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         115 | Alexander  | Su        |
|         103 | Alexander  | Lee       |
|         114 | Avg        | Su        |
|         193 | Britney    | Zhao      |
|         104 | Bruce      | Wong      |
+-------------+------------+-----------+
5 rows in set

要跳过两行并获取接下来的五行,请使用LIMITOFFSET子句,如以下语句所示。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 5 OFFSET 3;

结果如下图所示 -

如果使用的是MySQL,则可以使用LIMIT OFFSET子句的较短形式。

SELECT 
    employee_id, first_name, last_name
FROM
    employees
ORDER BY first_name
LIMIT 3 , 5;

2. 使用SQL LIMIT获取具有最高或最低值的前N行

可以使用LIMIT子句获取具有最高或最低值的前N行。 例如,以下声明获得薪资最高的前五名员工。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY salary DESC
LIMIT 5;

执行上面示例代码,得到以下结果 -

首先,ORDER BY子句按工资按降序对员工进行排序,然后LIMIT子句限制从查询返回的五行。

为了获得薪资最低的前五名员工,可以按升序对员工进行排序。

3. 获取具有第N个最高值的行

假设必须得到公司薪水第二高的员工。请使用LIMIT OFFSET子句,如下所示。

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 OFFSET 1;

ORDER BY子句按工资降序对员工进行排序。 LIMIT 1 OFFSET 1子句从结果集中获取第二行。

此查询的假设是每个员工都有不同的薪水。 如果有两名员工拥有相同的最高薪水,那么它将会失败。 此外,如果有两个或更多具有相同第二高薪的员工,则查询只返回第一个。

要解决此问题,可以使用以下语句首先获得第二高薪。

SELECT DISTINCT
    salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 , 1;

执行上面示例代码,得到以下结果 -

mysql> SELECT DISTINCT
    salary
FROM
    employees
ORDER BY salary DESC
LIMIT 1 , 1;
+--------+
| salary |
+--------+
| 17000  |
+--------+
1 row in set

并将结果传递给另一个查询:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = 17000;

结果如下所示 -

如果使用子查询,则可以将两个查询组合到单个查询中,如下所示:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = (SELECT DISTINCT
            salary
        FROM
            employees
        ORDER BY salary DESC
        LIMIT 1 , 1);

结果如下所示 -

在本教程中,我们向您介绍了SQL LIMITOFFSET子句,这些子句用于限制查询返回的行数。


猿狮妹
2022-12-03
SQLLimit 子句 在线教程
热门教程
1 SQL复制表 如果要将SQL表复制到同一数据库中的另一个表中,可以使用select语句。从一个表复制到另一个表的语法如下:SELECT * INTO FROM 例如,可以使用以下语句将hr_employee表的记录复制到employee表中。SELECT * INTO employee FROM hr_employee;注意:SELECT INTO与INSERT INTO语句完全不同...
2 SQL Max()函数 在本教程中,您将学习如何使用SQL Max函数查找组中的最大值。1. SQL MAX函数简介SQL提供MAX()函数,用于在一组值中查找最大值。 以下是MAX函数的语法。MAX(expression)MAX函数忽略NULL值。与SUM,COUNT和AVG函数不同,DISTINCT选项不适用于MAX函数。2. SQL MAX函数示例...
3 SQL Sum()函数 在本教程中,我们将演示如何使用SQL SUM函数,此函数计算所有值或不同值的总和。1. SQL SUM函数简介SQL SUM函数是一个聚合函数,它返回所有或不同值的总和。需要注意的是,只能将SUM函数应用于数字列。以下说明了SUM函数的语法。SUM([ALL|DISTINCT] expression)ALL运算符用于将聚合应用于所有值。 SUM函数默认使用ALL运算符。例如,如果有一组集合值:(1,2,3,3,NULL)。 使用SUM函数将返回9,请注意,SUM函...
4 SQL Insert语句 在本教程中,我们将学习如何使用SQL INSERT语句来将数据插入表中。1. SQL INSERT语句简介SQL提供了INSERT语句,用于将一行或多行插入表中。 INSERT语句用于:向表中插入一行向表中插入多行将行从一个表复制到另一个表中。...
5 SQL Count()函数 本教程将向您展示如何使用SQL COUNT函数来获取组中的项目数。1. SQL COUNT函数简介SQL COUNT函数是一个聚合函数,它返回符合条件行数。 可以使用SELECT语句中的COUNT函数来获取员工数量,每个部门的员工数量,指定工作岗位的员工数量等。以下是SQL COUNT函数的语法:COUNTC ([ALL | DISTINCT] expression);COUNT函数的结果取决于传递给它的参数。默认情况下,COUNT函数使用ALL关键字,无论是否...
6 SQL Update语句 在本教程中,您将学习如何使用SQL UPDATE语句来修改表中现有行的数据。
7 SQL Order By排序 本教程将演示如何使用SQL ORDER BY子句根据指定的标准按升序或降序对结果集进行排序。1. SQL ORDER BY子句简介当使用SELECT语句查询表中的数据时,结果集中显示的行的顺序可能与您的预期不符。在某些情况下,结果集中显示的行按其物理存储在表中的顺序排列。 但是,如果查询优化器使用索引来处理查询,则行记录将显示为它们以索引键顺序存储。 因此,结果集中的行顺序未确定或不可预测。查询优化器是数据库系统中的内置软件组件,用于确定SQL语句查询请求数据的最有效方...
8 SQL自连接 本教程将向您展示如何使用SQL自连接技术将表连接到自身。1. SQL自连接简介有时,将表连接到自身是很有用的。 这种类型的连接称为自连接。我们将一张表连接到自身来评估同一个表中其他行的行。 要执行自联接,我们使用内连接或左连接子句。因为同一个表在单个查询中出现两次,所以必须使用表别名。 以下语句说明了如何将表连接到自身。...
9 SQL检查约束 在本教程中,将学习如何使用SQL CHECK约束来验证基于布尔表达式的列或一组列中的数据。1. SQL CHECK约束简介CHECK约束是SQL中的完整性约束,它允许您指定列或列集中的值必须满足布尔表达式。您可以在单个列或整个表上定义CHECK约束。 如果在单个列上定义CHECK约束,则CHECK约束仅检查此列的值。 但是,如果在表上定义CHECK约束,则会根据同一行的其他列中的值限制列中的值。...
10 SQL Delete语句 在本教程中,您将学习如何使用SQL DELETE语句删除表中的一行或多行。1. SQL DELETE语句简介要从表中删除一行或多行,请使用DELETE语句。 DELETE语句的一般语法如下:
  • Copyright © 2021 猿狮院, All rights reserved.