SQL - LIMIT 子句



SQL LIMIT 子句

SQL LIMIT 子句用于限制 SELECT 语句返回的行数。此外,我们还可以将其与 UPDATE 和 DELETE 语句一起使用以限制(约束)结果记录。

例如,如果数据库表中存储了大量行,并且您只想获取一定数量的行,例如前 10 行,则可以在查询中使用 LIMIT 子句。

Microsoft SQL Server 不支持 LIMIT 子句。我们可以使用 TOP 子句从 MS SQL Server 数据库中的表中选择有限数量的记录。类似地,Oracle 支持 ROWNUM 子句来限制表的记录。

语法

以下是带有 SELECT 语句的 SQL LIMIT 子句的基本语法:

SELECT column_name(s)
FROM table_name
WHERE [condition]
LIMIT value;

其中,value 是要从顶部返回的行数。

示例

假设我们创建了一个名为 CUSTOMERS 的表,其中包含客户的个人详细信息,包括他们的姓名、年龄、地址和薪水等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,使用 INSERT 语句将值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES
   (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
   (2, 'Khilan', 25, 'Delhi', 1500.00 ),
   (3, 'Kaushik', 23, 'Kota', 2000.00 ),
   (4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
   (5, 'Hardik', 27, 'Bhopal', 8500.00 ),
   (6, 'Komal', 22, 'Hyderabad', 4500.00 ),
   (7, 'Muffy', 24, 'Indore', 10000.00 );

表将创建如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

现在,我们使用 LIMIT 子句从 CUSTOMERS 表中获取前 3 条记录,无需指定任何子句(以过滤数据),例如 WHERE、ORDER BY 等:

SELECT * FROM CUSTOMERS LIMIT 3;

输出

这将产生以下结果:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00

带有 ORDER BY 子句的 LIMIT

SQL 中的 ORDER BY 子句用于按升序或降序对查询的结果集进行排序。我们可以在 MySQL 数据库中将其与 LIMIT 子句一起使用以按排序顺序检索(或更新或删除等)前 N 个记录。

示例

使用以下查询,我们按排序顺序检索 CUSTOMERS 表的前 4 条记录。在这里,我们根据 AGE 列按升序对表进行排序:

SELECT * FROM CUSTOMERS ORDER BY AGE ASC LIMIT 4;

输出

我们获得如下结果:

ID 姓名 年龄 地址 薪水
6 Komal 22 Hyderabad 4500.00
3 Kaushik 23 Kota 2000.00
7 Muffy 24 Indore 10000.00
2 Khilan 25 Delhi 1500.00

注意 - ORDER BY 子句默认按升序排序数据。因此,如果我们需要按降序对 SQL 中的数据进行排序,则必须使用 DESC 关键字。

带有 WHERE 子句的 LIMIT

我们可以将 LIMIT 子句与 WHERE 子句一起使用以限制给定数量的行并根据指定的条件对其进行过滤。

示例

以下查询从 CUSTOMERS 表中检索前两个客户的详细信息,其姓名以 K 开头:

SELECT * FROM CUSTOMERS WHERE NAME LIKE 'k%' LIMIT 2;

输出

产生以下结果:

ID 姓名 年龄 地址 薪水
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00

LIMIT 子句与 DELETE 语句

在 MySQL 数据库中,LIMIT 子句可以与 DELETE 语句一起使用以删除满足给定条件的特定数量的行。

示例

在以下查询中,我们使用带有 LIMIT 子句的 DELETE 语句。在这里,我们删除了前 2 个姓名以 K 开头的客户:

DELETE FROM CUSTOMERS WHERE NAME LIKE 'K%' LIMIT 2;

输出

我们得到如下所示的输出:

Query OK, 2 rows affected (0.01 sec)

验证

我们可以通过使用 SELECT 语句检索其内容来验证更改是否反映在表中。以下是显示 CUSTOMERS 表中记录的查询:

SELECT * FROM CUSTOMERS;

表显示如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00
广告