📅  最后修改于: 2020-11-19 00:56:50             🧑  作者: Mango
MySQL Limit查询用于限制从结果集返回的行数,而不是在MySQL数据库中获取整个集。 Limit子句与SELECT语句一起使用,仅返回指定的行数。此查询仅接受一个或两个参数,并且它们的值应为零或任何正整数。
在这种情况下,表包含数千行,或者您只想返回最近插入的数据,这是至关重要的。换句话说,如果您对获取查询返回的所有行都不感兴趣,则将MySQL Limit子句与SELECT语句一起使用。当表包含大量数据时,它可以提高查询的性能,甚至可以使系统崩溃。
为了仅从表中获取指定的行,MySQL使用LIMIT子句,而SQL使用TOP子句,Oracle使用ROWNUM子句和SELECT语句。
以下是在MySQL中使用Limit查询的语法:
SELECT column_list
FROM table_name
LIMIT offset, count;
在以上语法中,我们可以看到:
Column_list:这是您要返回的列的名称。
Table_name:这是包含您的列名的表的名称。
偏移量:它指定要返回的行数。行的偏移量从0开始,而不是1。
计数:它指定要返回的最大行数。
下面的视觉表示可以更清楚地说明这一点:
注意:如果仅使用Limit子句指定一个参数,则MySQL会假定此参数确定从结果集中返回输出的最大行数。在这种情况下,Limit子句参数,offset和count是等效的。
用户需要将Limit子句与Order By子句一起使用。不使用Order By子句,您将获得未指定顺序的结果。在这种情况下,很难知道查询从哪几行返回结果。因此,将Group By子句与Limit子句配合使用以按特定顺序获取行是一个好习惯。
可以使用以下语法以唯一的顺序获取结果:
SELECT column_list
FROM table_name
GROUP BY order_expression
LIMIT offset, count;
让我们在数据库中创建一个包含以下数据的示例表,并使用各种示例了解Limit子句在MySQL中的工作方式:
表:员工
以下语句用于获得前五名年轻雇员:
SELECT * FROM employees
ORDER BY emp_age
LIMIT 5;
该语句首先使用Group By子句对员工年龄进行排序,然后Limit子句返回前五名的结果。执行完上述步骤后,我们将获得以下输出:
有时您希望得到一个介于值范围之间的结果。例如,您有大量行要在应用程序上显示数据,然后将其划分为页面,并且每个表在一个表中最多包含10行。在这种情况下,您可以使用以下查询来获取行范围:
SELECT emp_id, emp_name, income FROM employees
ORDER BY income DESC
LIMIT 3,7;
该语句返回从第3行开始的行,最大到第7行。它还可以按从高到低的顺序对员工的收入进行排序。执行查询,您将获得以下输出:
MySQL Limit也可以与WHERE子句一起使用。它首先检查表中的指定条件,并生成与条件匹配的行。
此查询选择年龄在30岁以上的前五名雇员。在这里,我们还使用Order By子句使用收入将雇员按降序排序。
SELECT emp_name, emp_age, income FROM employees
WHERE emp_age>30
ORDER BY income DESC
LIMIT 5;
成功执行以上语句后,我们将获得以下输出:
有时我们想要获得第n个最高或最低值的行。在这种情况下,我们可以使用以下MySQL LIMIT子句来获得预期的结果:
SELECT column_list
FROM table_name
ORDER BY expression
LIMIT n-1, 1;
在这种语法中,LIMIT n-1,1子句返回从第n行开始的1行。
例如,以下查询返回收入第二高的员工信息:
SELECT emp_name, city, income FROM employees
ORDER BY income
LIMIT 1, 1;
执行以上语句,将给出以下查询:
需要注意的是,以上查询仅在您的表不包含两个有一定收入的雇员时才有效。在这种情况下,我们将使用DENSE_RANK()获得更准确的结果。