在 SQL 中获取第m个开始的n条记录方法汇总
在 SQL 中,要获取第m个开始的n条记录,主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例阐明几种常见的方法:1. 使用 LIMIT 和 OFFSET
适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。
SELECT * FROM table_name ORDER BY column_name LIMIT 20 OFFSET 10;
[*]LIMIT 20 表现返回 20 条记录。
[*]OFFSET 10 表现跳过前 10 条记录。
2. 使用 ROW_NUMBER() 函数
适用于 SQL Server、Oracle、PostgreSQL 等支持窗口函数的数据库。
SELECT * FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS rn FROM table_name
) subquery
WHERE rn > 10 AND rn <= 30;
[*]ROW_NUMBER() 为每一行分配一个唯一的序号。
[*]通过子查询筛选出指定范围的记录。
3. 使用 FETCH FIRST 和 OFFSET
适用于支持 SQL:2008 尺度的数据库,如 SQL Server 和 Oracle 12c。
SELECT * FROM table_name
ORDER BY column_name
OFFSET 10 ROWS
FETCH NEXT 20 ROWS ONLY;
[*]OFFSET 10 ROWS 跳过前 10 条记录。
[*]FETCH NEXT 20 ROWS ONLY 获取接下来的 20 条记录。
4. 使用 TOP 和子查询
适用于 SQL Server 中不支持 OFFSET FETCH 的旧版本。
SELECT TOP 20 * FROM
(
SELECT TOP 30 * FROM table_name ORDER BY column_name
) subquery
ORDER BY column_name DESC;
[*]内部子查询获取前 30 条记录。
[*]外部查询获取最后 20 条记录(即第 11 到第 30 条)。
5. 使用 LIMIT 和 RANK(SQLite 的变通方法)
SQLite 不支持 OFFSET 时,可以用子查询来实现:
SELECT * FROM table_name
WHERE rowid IN
(
SELECT rowid
FROM table_name
ORDER BY column_name
LIMIT 20 OFFSET 10
); 总结
[*]保举方法:
[*]如果你的数据库支持 LIMIT OFFSET,那是最简朴的方法。
[*]如果使用 SQL Server,OFFSET FETCH 和 ROW_NUMBER() 是更机动的选择。
[*]Oracle 数据库可以用 ROW_NUMBER() 或 FETCH 实现。
根据你的数据库环境选择适合的方法即可。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]