浅析Mysql和Oracle分页的区别

目录
  • MySQL使用limit进行分页
  • Oracle使用rownum进行分页
  • Mysql与Oracle级联查询
  • Mysql省市区级联查询
  • Mysql与Oracle插入数据存在修改不存在新增

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分页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍

    先来定义分页语句将要用到的几个参数: int currentPage ; //当前页 int pageRecord ; //每页显示记录数 以之前的ADDRESSBOOK数据表为例(每页显示10条记录): 一.SqlServe下载 分页语句 String sql = "select top "+pageRecord +" * from addressbook where id not in (select top "+(currentPage-)*pageRecor

  • mysql oracle和sqlserver分页查询实例解析

    最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一).mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: selecto.*from(sql)o limit firstIndex,pageSize 如下面的截图,每页显示的记录数为20: 查询(1-20)这20条记录 查询(21-40)这20条记录 mysql的分页查询就这么简单...... (二).sqls

  • oracle,mysql,SqlServer三种数据库的分页查询的实例

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE - LIMIT 10; #返回前10行select * from table WHERE - LIMIT 0,10; #返回前

  • 浅析Oracle和Mysql分页的区别

    一.Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize PS: (1)第一个参数值m表示起始行,第二个参数表示取多少行(页面大小) (2)m= (2-1)*10+1,n=10 ,表示 limit 11,10从11行开始,取10行,即第2页数据. (3)m.n参数值不能在语句当中写计算表达式,写到语句之前必须计算好值. 二.Oracle使用rownum分页 select * f

  • Oracle与Mysql主键、索引及分页的区别小结

    区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id.nextval 2.索引: mysql索引从0开始,Oracle从1开始. 3.分页, mysql: select * from user order by desc limit n ,m. 表示,从第n条数据开始查找,一共查找m条数据. Oracle:select * from user select rownum a * from ((select * from user)a

  • mysql、mssql及oracle分页查询方法详解

    本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返

  • 浅析Mysql和Oracle分页的区别

    目录 MySQL使用limit进行分页 Oracle使用rownum进行分页 Mysql与Oracle级联查询 Mysql省市区级联查询 Mysql与Oracle插入数据存在修改不存在新增 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

  • MySQL与Oracle的语法区别详细对比

    Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_char(sysdate,'hh24-mi-ss') from dual; mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_format(now(),'%H-%i-%S'); 日期函数 增加一个月: SQL> se

  • 解析mysql与Oracle update的区别

    update :单表的更新不用说了,两者一样,主要说说多表的更新 复制代码 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标        update (        select t.charger_id_ new_charger_id_         from t_cus_year_status t         left join t_customer_infos cus on cus.id_ = t.cus_i

  • 简述MySQL与Oracle的区别

    1.  Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访问量,是OLTP最好的工具. 3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能. 4.Oracle也Mysql操作上的一些区别 ①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为a

  • MySQL与Oracle SQL语言差异比较一览

    数据类型 编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型: MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) 3 Date DATATIME 日期字段的处理 MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前

  • 详解Mysql和Oracle之间的误区

    本质区别 Oracle数据库是一个对象关系数据库管理系统(收费) MySQL是一个开源的关系数据库管理系统(免费) 数据库的安全性 mysql使用三个参数来验证用户,即用户名,密码和位置 Oracle使用了更多的安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等 权限 MySQL的权限系统是通过继承形成的分层结构.权限授于高层时,其他低层隐式继承被授于的权限,当然低层也可改写这些权限. 按授权范围不同,MySQL有以下种授权方式: 1.全局: 2.基于每个主机:

  • PHP实现的oracle分页函数实例

    本文实例讲述了PHP实现的oracle分页函数.分享给大家供大家参考,具体如下: mysql有limit,分页的时候,我们可以用limit 30,40,而oracle没有limit,用其他的方法来代替--rownum. 一.底层方法 /** * 数据连接 */ function connect($db_user, $db_pwd, $db_name, $db_nls) { $this->dbh = oci_connect($db_user, $db_pwd, $db_name, $db_nls)

  • 浅析MySQL 备份与恢复

    1.简介 数据无价,MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做.备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻.除了备份本身, 如何使用备份来恢复 服务也是一项重点内容,不能用来恢复的备份没有意义.本文主要会针对备份和恢复这两方面做一些简单的介绍. 本文为<高性能MySQL>备份相关章节的读书笔记. 2.备份和恢复的简单定义 正如简介所说,备份人尽皆知,也很容易引起人的重视.根据需求写定期脚本,或者使用其他方式都是比较常见的.但

随机推荐