• MySQL与Oracle的分页


    MySQL与Oracle的分页

    当我们通过SQL去查询一个结果集的时候,并不需要查看所有行,可能只是查看前几行,或者中间的几行。则需要像MySQLlimitOracleROWNUMFETCH NEXT来实现。

    MySQL

    语法

    SELECT * FROM table_name LIMIT [offset,] row_count;
    
    • 1

    LIMIT 是MySQL中用于限制返回结果行数的关键字。

    • table_name 是你要查询的表名。
    • row_count 是你要返回的行数。
    • offset 是可选的,表示从查询结果的第几行开始返回,通常用于分页查询。

    实例

    -- 写法1 不携带OFFSET
    SELECT * FROM TEST LIMIT 10; -- 返回前10行
    
    -- 写法2 携带OFFSET 但携带OFFSET关键字
    SELECT * FROM TEST LIMIT 10,5; -- 跳过前10行后,再返回5行
    
    -- 写法3 携带OFFSET 并携带OFFSET关键字
    SELECT * FROM TEST LIMIT 10 OFFSET 5; -- 跳过前5行后,再返回10行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    不同的写法对应参数的顺序是不一致的这个需要注意。

    Oracle

    ROWNUM

    语法

    首先我们要这个ROWNUM是这个什么?

    在 Oracle 数据库中,ROWNUM 是一个伪列(虚拟列),用于标识返回结果集中的行号。

    ROWNUM 是在查询结果返回后才赋值的,它的值是按照查询结果的顺序逐行递增的。

    通常来说,使用ROWNUM我们尽量还是需要子查询来配合使用,因为如果当使用ORDER BY去进行排序的话,ROWNUM是会根据排序后的结果集重新生成的,这个时候这个行号就不是原来的行号了。另外当我们直接使用WHERE ROWNUM > 1他会导致结果集未空的情况,**因为ROWNUM 是在查询结果返回后才赋值的。**所以直接使用WHERE 则就直接过滤掉了。

    实例
    -- 返回从10行后的所有数据
    SELECT * FROM (
        SELECT ROWNUM ROW_NUM FROM Test 
    )  where ROW_NUM > 10
    
    -- 返回从11行-20的数据
    SELECT * FROM (
        SELECT ROWNUM ROW_NUM FROM Test 
    )  where ROW_NUM > 10 AND ROW_NUM <= 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    FETCH NEXT(Oracle 12c及以上版本可用)

    FETCH NEXTFETCH FIRST 都是返回查询结果中的前 n 行。两个关键字同义。

    语法
    SELECT * FROM table_name
    OFFSET n ROWS
    FETCH NEXT m ROWS ONLY;
    
    • 1
    • 2
    • 3
    • OFFSET n ROWS:跳过前 n 行,即从第 n+1 行开始返回结果。

    • FETCH NEXT m ROWS ONLY:返回接下来的 m 行。

    实例
    SELECT ROWNUM FROM Test FETCH NEXT 10 ROWS ONLY; -- 返回前10行
    
    # 这里是MySQL没法通过只使用OFfSET使用的,但是可以 limti 10,100000000 来实现😂 虽然不优雅但可以实现
    SELECT ROWNUM FROM Test OFFSET 10 ROWS;   -- 跳过10行,返回之后的所有行
    
    SELECT ROWNUM FROM Test OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;  -- 跳过前5行后,再返回10行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    SpringBoot 22 Swagger配置扫描接口和开关、过滤url、根据环境决定使用
    Spring Cloud Gateway 中文文档
    栈与队列--删除字符串中的所有相邻重复项
    Linux Docker 安装 Elasticsearch Logstash Kibana
    Android拦截HOME键
    Django数据库查询集数据(Queryset)转化为json,查询value和value_list的用法,json.loads和json.dumps
    C语言:对于宏的一些概念及技巧
    Python 中下划线的 5 种含义
    MySQL8--Windows下使用压缩包安装的方法
    Linux病毒扫描工具ClamAV 安装使用
  • 原文地址:https://blog.csdn.net/qq_43501821/article/details/132922586