首页 > 数据库 >主流常见关系数据库分页sql语句写法。MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Server。limit、offset、fetch、rownum

主流常见关系数据库分页sql语句写法。MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Server。limit、offset、fetch、rownum

时间:2023-10-02 12:06:05浏览次数:51  
标签:10 SQLite PostgreSQL -- demo 关系数据库 rownum where select


前言

1.分页sql

  • 逻辑:每页10条,取第3页。即取第21~30条数据

1.1.MySQL/SQLite/PostgreSQL

select * from demo limit 10 offset 20;
select * from demo limit 20, 10;         -- PostgreSQL不支持该写法

1.2.Oracle12C+

  • Oracle11g之前很难用,Oracle12C+与MySQL用法格式一样了,只是语法关键字不一样,而且比较啰嗦
  • 语法
  • OFFSET是偏移量,常数,不写默认为0,常用于分页。
  • FETCH NEXT 1 ROWS 等同于 FETCH FIRST 1 ROW。
  • only只返回指定的量,with ties 返回和最后一条数据相同的数据。
[OFFSET offset ROWS] FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
select * from demo offset 20 rows fetch next 10 rows only;
select * from demo                fetch next 10 rows only;

1.3.Oracle11g之前

  • 写法一比写法二性能高。详见

1.3.1.标准写法一(性能高)

-- 套2层,这样可以不影响原始sql
select * from                               -- 套第2层,用rownum分页
    (
    select rownum as rn, tmp.* from         -- 套第1层,获取rownum。注意rownum必须起别名,因为rownum本质实时生成的
        ( select * from demo ) tmp          -- 原始sql
    where rownum <= 30
    )
where rn > 20;

1.3.2.标准写法二(性能低)

select * from                               -- 套第2层,用rownum分页
    (
    select rownum as rn, tmp.* from         -- 套第1层,获取rownum。注意rownum必须起别名,因为rownum本质实时生成的
        ( select * from demo ) tmp          -- 原始sql
    )
where rn <= 30 and rn > 20;

1.3.3.取前n条简化写法

select * from demo where rownum <= 10;

1.3.4.错误写法

  • 查不到任何数据,详见
-- 注意:如下所示是错误的,不会查到记录。因为 rownum 是从1开始,永远不会大于2,where 条件永不成立,因为没有结果查询出来,所以 rownum 也不能加一,永远是1
select * from demo where rownum > 10;
select * from demo where rownum = 10;
select * from demo where rownum >= 10;
-- 原理同上,不等于10,只能取到前9条记录
select * from demo where rownum != 10;


标签:10,SQLite,PostgreSQL,--,demo,关系数据库,rownum,where,select
From: https://blog.51cto.com/lishuoboy/7682521

相关文章

  • 甲骨文宣布: 也做 PostgreSQL!
    PostgreSQL在开源数据库世界中一直是一个标志性的存在。经过35年的严格开发,它以其可靠性、强大的功能和性能而自豪。DB-engines的突出显示,其市场份额的增长证明了其适应性强的数据模型和满足各种用例需求的多样化扩展。考虑到PG突出的地位,甲骨文将推出基于PostgreSQL14.9版......
  • 甲骨文宣布: 也做 PostgreSQL!
    PostgreSQL在开源数据库世界中一直是一个标志性的存在。经过35年的严格开发,它以其可靠性、强大的功能和性能而自豪。DB-engines的突出显示,其市场份额的增长证明了其适应性强的数据模型和满足各种用例需求的多样化扩展考虑到PG突出的地位,甲骨文将推出基于 PostgreSQL14.9版......
  • PostgreSQL数据库事务系统——获取virtual transaction id
    如果一个事务没有进行INSERT、UPDATE、DELETE操作,那么就步会分配事务ID,但事务仍然用一个虚拟事务ID代表自己。虚拟事务ID由两部分组成,第一部分是BackendID,另一个是每个会话自己维护的本地事务ID计数器。通过两部分组合,能保证这个虚拟事务ID的唯一性。在PostgreSQL数据库IPC——SI......
  • postgresql xid回卷预防及排查
    监控WITHmax_ageAS(SELECT2000000000asmax_old_xid,settingASautovacuum_freeze_max_ageFROMpg_catalog.pg_settingsWHEREname='autovacuum_freeze_max_age'),per_database_statsAS(SELECTdatname......
  • postgresql临时表
    PostgreSQL中的临时表分两种,一种是会话级临时表,一种是事务级临时表。在会话级临时表中,数据可以存在于整个会话的生命周期中,在事务级临时表中,数据只能存在于事务的生命周期中。不管是会话级还是事务级的临时表,当会话结束后,临时表会消失,这和Oracle数据库不同。Oracle数据库当会话......
  • 数据库连接:使用Python连接到MySQL、SQLite和MongoDB
    在现代应用程序和数据科学中,数据库连接是至关重要的一部分。Python提供了丰富的库和驱动程序,可以轻松连接各种数据库,包括MySQL、SQLite和MongoDB。本文将介绍如何使用Python连接到这些不同类型的数据库,并提供相应的代码示例。连接到MySQL数据库MySQL是一个流行的关系型数据库管理系......
  • PostgreSQL数据库WAL日志空间大小以及不清理的原因深入分析
    1.背景很多初学者会对WAL日志占用多少空间比较疑惑,听网上的一些文章说是由max_wal_size来控制的,但发现很多时候WAL日志空间会超过这个设置的值,不知道为什么?同时有时会发现WAL日志不清理了,占用空间在不停的增长,然后不知道为什么?看一些网上的文章,发现情况不是网上说的那种情况。......
  • Linux CentOS 7.x离线安装PostgreSQL操作手册
    一、准备环节rpm-qa|greppostgres检查PostgreSQL是否已经安装rpm-qal|greppostgres检查PostgreSQL安装位置postgresql-12.2.tar.gz二、Pgsql数据库安装下载下载地址:http://www.postgresql.org/ftp/source/选择你你需要的版本,本次安装12.2的版......
  • PostgreSQL Serial
    概念描述PostgreSQL中的SERIAL是一种特殊的类型,用于创建自增长的整数列,通常用作表的主键或其他需要唯一标识的列。SERIAL实际上不是真正的类型,而是一种便捷的写法,它会自动创建一个SEQUENCE对象,并将该SEQUENCE的下一个值作为该列的默认值。PostgreSQLSERIAL是一种特殊的用于生产整......
  • PostgreSQL教程:备份与恢复(物理备份、物理恢复)
    物理备份(归档+物理)这里需要基于前面的文件系统的备份和归档备份实现最终的操作单独使用文件系统的方式,不推荐毕竟数据会丢失。这里直接上PostgreSQL提供的pg_basebackup命令来实现。pg_basebackup会做两个事情、会将内存中的脏数据落到磁盘中,然后将数据全部备份会将wal日志直接做归......