SQL Limit子句
在SQL中,用户可以使用Limit子句来限制查询结果。在Oracle中,可以使用FETCH FIRST n ROWS ONLY或ROWNUM来执行与Limit相同的功能。在满足查询中所述条件的大量记录的情况下,它对于用户希望数据按顺序排列非常有帮助。因此,每次只查看有限的记录可能更好。
使用Limit时需要记住的一些关键点
- Limit子句限制了SQL返回的记录数。
- 确保不能在所有SQL版本中实现该子句是很重要的。并非所有SQL版本都支持Limit子句。
- 用户可以使用SQL 2008的OFFSET/FETCH FIRST子句来实现Limit子句。
- 在实现Limit子句时,用户应确保limit/offset表达式是非负整数。
实现SELECT LIMIT的语法
在您的SELECT语句中实现LIMIT关键字的语法如下所示:
SELECT Exp
FROM tbls
WHERE condn
ORDER BY exp [ASC | DESC]
LIMIT number [ OFFSET offset_value];
参数
- Exp: 它指定用户要从表中检索的列或数据值。
- Tbls: 它指定上述表达式中的列所属的表的名称。FROM子句中应至少有一个表,并且该表必须具有SELECT语句的列。
- WHERE Condn: 在SQL语句中添加WHERE条件是可选的。目的是实现WHERE子句,以检索满足所述条件的结果。
- ORDER BY表达式: 它也是可以使用SQL查询来实现的例外子句。它在SELECT LIMIT查询中实现,以使用户能够排列他们想要检索的记录。exp包含列的名称和用于排列记录的值。它可以是升序或降序。
- LIMIT: 该关键字用于指定结果集中应存在的行数。它以数字值作为参数,表示在实现SELECT查询时显示的结果数。
- 例如,如果实现了LIMIT 10,则只返回满足SELECT条件的第一批10条记录。这就是实现ORDER BY子句变得至关重要的地方,以使用户可以保持SELECT查询返回的结果顺序。
- 抵消偏移量: 它是可以在LIMIT子句中使用的可选参数。它用于确定检索过程从哪个记录开始。它决定了检索开始的第一行。
如何实现LIMIT关键字
- LIMIT关键字设置了返回集中显示的结果上限。
- 用户需要为LIMIT关键字分配一个数字值。它可以从0或任何其他正数范围。如果将LIMIT设置为0,则在结果集中不会返回记录。
- 用户使用偏移值来指定数据检索将从表中的哪个记录开始。
- 选择更新或删除顺序适合使用LIMIT语法来实现。
需要实现LIMIT子句
考虑到开发人员想要开发一个在大型数据库上运行的应用程序的情况。数据库非常庞大,包含大量满足搜索和检索条件的记录,并且增加了加载时间。系统设计师可以通过设定应用程序将返回的记录的最大数量来减少加载时间。假设单个搜索中显示的最大记录数为20。为了确保满足客户需求的上述情况,用户可以实施LIMIT关键字,以便每个选项卡只返回20条记录以限制从查询返回的数据。
例如,
让我们考虑这样一种情况,您有一个学生表,为了更好地理解,我们将使用Limit子句从结果集中检索有限数量的结果。我们将实施Limit子句以执行这些操作。
表如下:
S_ID | S_Name | S_Dept | S_Country | S_Age |
---|---|---|---|---|
100 | Aman | Science | India | 19 |
105 | Harsh | Maths | England | 20 |
110 | Harshit | Science | India | 17 |
200 | Kavya | Social Studies | Canada | 18 |
120 | Abhay | Maths | India | 21 |
102 | Ravi | English | India | 22< |
在上述表中执行SQL查询以定义和插入数据:
-- create a table
CREATE TABLE Student (
S_ID INT,
S_Name VARCHAR(50),
S_Dept VARCHAR(50),
S_Country VARCHAR(50),
S_Age INT
);
-- insert some values
INSERT INTO Student (S_ID, S_Name, S_Dept, S_Country, S_Age)
VALUES (100, 'Aman', 'Science', 'India', 19),
(105, 'Harsh', 'Maths', 'England', 20),
(110, 'Harshit', 'Science', 'India', 17),
(200, 'Kavya', 'Social Studies', 'Canada', 18),
(120, 'Abhay', 'Maths', 'India', 21),
(102, 'Ravi', 'English', 'India', 22);
-- fetch some values
SELECT * FROM Student;
输出:
实现LIMIT子句
SELECT *
FROM Student
LIMIT 2;
输出:
使用Order By子句实现Limit子句
SELECT *
FROM Student
ORDER BY S_Age DESC
LIMIT 3;
输出:
限制子句操作符可在用户不实施SQL中的WHERE子句时用于检索所选择的结果。上述查询将返回年龄最大的3名学生,而无需实施条件语句。
使用LIMIT和OFFSET
LIMIT x OFFSET y的意思是跳过前面的y个条目,然后返回接下来的x个条目。要实施OFFSET,用户必须实现ORDER BY子句。用户只能使用ORDER来实施OFFSET。在使用OFFSET时,值应大于或等于零。如果值为负数,查询将返回错误。
SELECT *
FROM Student
ORDER BY S_Age LIMIT 4 OFFSET 2;
或
SELECT *
FROM Student
ORDER BY S_Age LIMIT 4,2;
以上查询将跳过前两个条目,并返回接下来的4个条目。在上述查询中,Limit具有两个参数。第一个值被视为X,并且是偏移值。它将跳过X条记录;第二个参数是Y,它指定将返回的下一个Y条记录。
输出:
从表中检索第N个最高或最低的值
limit函数确定数据库中存储的最高或最低值。
现在我们将查看在查找最高或最低值时LIMIT语句的使用。我们需要检索包含第N个最高或最低值的行。我们可以使用后续的MySQL LIMIT子句来获得所需的结果。
语法:
SELECT column_list
FROM table_name
ORDER BY expression
LIMIT n-1, 1;
SELECT S_Age FROM Student
ORDER BY S_Age LIMIT 2, 1;
输出:
MySQL中的Where限制
在SQL中使用Limit关键字时,用户可以实现WHERE子句。它允许用户指定一个条件,该条件应该由从表中产生的限制行作为结果集满足。
SELECT S_Age
FROM Student
WHERE S_ID<110
ORDER BY S_Age
LIMIT 2, 1;
输出:
实现LIMIT子句的优势
- Limit子句的主要功能是指定结果集中的最大行数。它返回确切的最大行数,即使最大行数超过满足指定条件的行数。它们是唯一从表中返回的行,即使它们在WHERE子句中满足条件。
- 它还可以通过实现宿主变量或本地变量中的SPL输入值来分配最大值。
- 如果LIMIT子句后面是ORDER BY子句,则检索到的记录将根据ORDER BY子句进行排序。由于查询结果返回的顺序没有确定性。因此,为了以特定顺序获取结果,用户可以实现ORDER BY子句,通过限制行的顺序来获取一定数量的符合条件的行的固定子集。
LIMIT子句的限制
有一些特定情况限制了LIMIT子句的实现。在以下情况下,用户无法实现LIMIT子句:
- 在定义视图时。
- LIMIT子句无法在嵌套的SELECT语句中实现。
- 不能在FROM子句中提及的表达式所用到的子查询之外实现LIMIT子句。
- 不能与作为SPL例程中singleton SELECT where (max=1)表达式实现的嵌套SELECT查询一起使用,其中嵌套SELECT语句被实现为表达式。