数据库教程-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子句确保返回的行按指定顺序非常重要。

SQL Limit子句

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

1. SQL LIMIT子句示例

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

SQL 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; 

结果如下图所示 –

SQL Limit子句

如果使用的是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; 

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

SQL Limit子句

首先,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; 

结果如下所示 –

SQL Limit子句

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

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 Limit子句

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

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 sql教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/25/数据库教程-sql-limit子句/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注