Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Limit子句
SQL Limit子句
作者:--    发布时间:2019-11-20

本教程我们将演示如何使用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子句,这些子句用于限制查询返回的行数。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册