浅析Mysql和Oracle分页的区别

 更新时间:2022年12月07日 15:06:54   作者:qq_41482600  
Mysql使用limit分页而Oracle使用rownum分页,下面通过本文给大家介绍Oracle和Mysql分页的区别,需要的的朋友参考下吧

MySQL使用limit进行分页

select * from stu limit m,n; // m=(pageIndex-1)*pageSize,n=pageSize
-- 返回总条,查询表添加字段sql_calc_found_rows
select sql_calc_found_rows a.* from AAA a limit m,n
-- found_rows单独查询总条数
select found_rows total;
  • 第一个参数m表示起始行,第二个参数表示取多少行;
  • pageIndex表示页索引,即查询第几页的数据(从1开始),pageSize表示页大小,即一页最多显示多少行记录;
  • m= (2-1)*10+1=11,n=10,limit 11,10,表示从第11行开始取记录行(包含第11行),共取10行,也表示查询第2页的数据,这一页最多显示10行记录。

Oracle使用rownum进行分页

select * from(
  select rownum rn,a.*,count(*) over() total from table_name a where rownum <= x 
  -- 结束行,x=pageIndex*pageSize
)
where rn >= y; -- 起始行,y=(pageIndex-1)*pageSize+1
-- 返回总条数
select count(*) over() total from AAA
  • >= y,<= x表示从第y行(起始行)~x行(结束行) 。
  • rownum只能比较小于,不能比较大于,因为rownum是先查询后排序的,例如你的条件为rownum>1,当查询到第一条数据,rownum为1,则不符合条件。第2、3…类似,一直不符合条件,所以一直没有返回结果。所以查询的时候需要设置别名,然后查询完成之后再通过调用别名进行大于的判断。

Mysql与Oracle级联查询

  1. start with: 指定起始节点的条件
  2. connect by: 指定父子行的条件关系
  3. prior: 查询父行的限定符,格式: prior column1 = column2 or column1 = prior column2 and ...
  4. nocycle: 若数据表中存在循环行,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两行只会显示其中的第一条
  5. 循环行: 该行只有一个子行,而且子行又是该行的祖先行
  6. connect_by_iscycle: 前置条件:在使用了nocycle之后才能使用此关键字,用于表示是否是循环行,0表示否,1 表示是
  7. connect_by_isleaf: 是否是叶子节点,0表示否,1 表示是
  8. level: level伪列,表示层级,值越小层级越高,level=1为层级最高节点
-- connect by: 指定父子行的条件关系
-- start with: 指定起始节点的条件
select c.bc_id,c.bc_name from org_busicorp c 
connect by prior c.bc_pid = c.bc_id
start with c.bc_id = '001';

Mysql省市区级联查询

-- 二三级查询
select c1.bc_id,c1.bc_name from org_busicorp c1 where c1.bc_pid = '00'
union
select c2.bc_id,c2.bc_name from org_busicorp c2 
left join org_busicorp c1 on c1.bc_id = c2.bc_pid
where c1.bc_pid = '00'
-- 包含当前id
union
select c3.bc_id,c3.bc_name from org_busicorp c3 where c3.bc_id = '00'

Mysql递归函数

SELECT
	ID.LEVEL,
	DATA.* 
FROM
	(
	SELECT
		@ids AS _ids,
		( SELECT @ids := GROUP_CONCAT( id ) FROM 表名 WHERE FIND_IN_SET( 父级 id字段, @ids ) ) AS cids,
		@l := @l + 1 AS LEVEL 
	FROM
		表名,
		( SELECT @ids := '条件id', @l := 0 ) b 
	WHERE
		@ids IS NOT NULL 
	) ID,
	表名 DATA 
WHERE
	FIND_IN_SET( DATA.id, ID._ids ) 
ORDER BY
	LEVEL,
	id

Mysql与Oracle插入数据存在修改不存在新增

Mysql插入数据存在修改、不存在新增

insert into `subject`(subjectId,subjectName) 
values('7','离散') 
on duplicate key update subjectName='离散数学';

Oracle插入数据存在修改、不存在新增

merge into 目标表 a
using 源表 b
on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  
when matched then update set a.字段=b.字段 --目标表别称a和源表别称b都不要省略
when  not matched then insert (a.字段1,a.字段2……)values(b.字段1,b.字段2……) --目标表别称a可省略,源表别称b不可省略

源表b可能是一张表结构不同于a的表,有可能是一张构建相同表结构的临时表,也有可能是我们自己组起来的数据

merge into student a
using (select '7' as id from dual) s
on (a.id = s.id)
when matched then
  update set a.student_name = '小明二号'
when not matched then
  insert (id, student_name, fk_class) values ('7', '小明', '2')

到此这篇关于浅析Mysql和Oracle分页的区别的文章就介绍到这了,更多相关Mysql和Oracle分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL完整性约束的定义与实例教程

    MySQL完整性约束的定义与实例教程

    数据完整性约束是对关系性模型完整性规则做某种约束条件,这篇文章主要给大家介绍了关于MySQL完整性约束的相关资料,需要的朋友可以参考下
    2021-05-05
  • MySQL数据库服务器端核心参数详解和推荐配置

    MySQL数据库服务器端核心参数详解和推荐配置

    MySQL手册上也有服务器端参数的解释,以及参数值的相关说明信息,现针对我们大家重点需要注意、需要修改或影响性能 的服务器端参数,作其用处的解释和如何配置参数值的推荐,此事情拖了不少时间,为方便大家帮忙纠错
    2011-12-12
  • MySQL高级查询之与Group By集合使用介绍

    MySQL高级查询之与Group By集合使用介绍

    在MySQL中,你可以获取表达式组合的连接值。你可以使用DISTINCT删去重复值。假若你希望多结果值进行排序,则应该使用 ORDER BY子句
    2013-08-08
  • MySQL生成连续的数字/字符/时间序列的方法

    MySQL生成连续的数字/字符/时间序列的方法

    有时候为了生成测试数据,或者填充查询结果中的数据间隔,需要使用到一个连续的数据序列值,所以,今天我们就来介绍一下如何在 MySQL 中生成连续的数字、字符以及时间序列值,需要的朋友可以参考下
    2024-04-04
  • mysql 5.7更改数据库的数据存储位置的解决方法

    mysql 5.7更改数据库的数据存储位置的解决方法

    随着MySQL数据库存储的数据逐渐变大,已经将原来的存储数据的空间占满了,导致mysql已经链接不上了。所以要给存放的数据换个地方,下面小编给大家分享mysql 5.7更改数据库的数据存储位置的解决方法,一起看看吧
    2017-04-04
  • MySQL同步ES(Elasticsearch)的四种常见方案分享

    MySQL同步ES(Elasticsearch)的四种常见方案分享

    MySQL和Elasticsearch(ES)是两个非常重要的数据存储和搜索技术,MySQL是一种关系型数据库,而ES则是一种文档型数据库,在许多情况下,我们需要将MySQL中的数据同步到ES中,本文将介绍四种常见的MySQL同步ES方案,需要的朋友可以参考下
    2023-07-07
  • 通过存储过程动态创建MySQL对象的流程步骤

    通过存储过程动态创建MySQL对象的流程步骤

    在当今数据驱动的世界中,高效的数据库管理至关重要,本文将展示如何通过存储过程自动化地创建各种 MySQL 数据库对象,通过这些方法,我们可以快速响应业务需求,提高数据库管理的灵活性和效率,需要的朋友可以参考下
    2024-10-10
  • mysql5.7.18安装并修改初始密码的方法

    mysql5.7.18安装并修改初始密码的方法

    这篇文章主要为大家详细介绍了Mysql5.7安装并修改初始密码的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • MySql三种避免重复插入数据的方法

    MySql三种避免重复插入数据的方法

    这篇文章主要介绍了MySql三种避免重复插入数据的方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL实战之Insert语句的使用心得

    MySQL实战之Insert语句的使用心得

    这篇文章主要给大家介绍了关于MySQL实战之Insert语句的使用心得的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论