Mysql与Oracle的区别(1)

16 篇文章 1 订阅
9 篇文章 0 订阅

第一章 MySql与Oracle的函数区别

一,to_date和to_char
OracleMysql
字符串–>日期to_date()str_to_date()
日期–>字符串to_char()date_format()
格式yyyy-mm-dd hh:mi:ss%Y-%m-%d %h:%i:%s

Mysql中 H大写是指:24小时制;h小写是指的是12小时制

Oracle中 HH24是指:24小时制

二,分页函数
OracelMysql
函数Rownum/rownum=1Limit/limit 1
//oracle中是采用rownum分页,A代表首行(从1开始),B代表结束行
oracle>select * from dual where rownum between A and B

//mysql中采用limit分页,A代表首行(从0开始),B代表偏移量(行数)
mysql>select * form dual where limit A,B

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15   
  
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:    
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.   
  
//如果只给定一个参数,它表示返回最大的记录行数目:    
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行   
  
//换句话说,LIMIT n 等价于 LIMIT 0,n。  
三,判空函数
OracleMysql
NVL()/NVL2()IfNull()
Decode()/case…when…if()/case…when…

备注:

格式:IF(Condition,A,B)

意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。

作用:作为条件语句使用。

在mysql中,大于0或不为空的都可以表示为true;

小于等于0或为空或为null则表示false;

空字符串也是false;

case…when…代替decode

四,函数
OracleMysqlSqlServer
with…as…函数YNY
Rownum字段YNN
||YN(concat代替)N
时间SYSDATENOW()
序列sequence.nextVal()自定义函数
五,字符串函数
OracleMysql
to_char()CAST(123 AS CHAR)/CONCAT(123,’’)
六,左外连接/右外连接
OracleMysql
oracle左连接,右连接可以使用(+)来实现Mysql只能使用left join ,right join等关键字.
""作为参数传入后,在oracle中将识别为null““作为参数据传mysql还是””
七,递归
OracleMysql
select * from dual start with … connect by …select * from dual where orgNo like ‘**%’

备注: MySql中没有 start with … connect by …

八,别名
别名OracleMysql
delete语句YN
update语句YN
九,interval

interval改词是Mysql中关键字

limitorder by 一样是最后使用,不能跟在and后面

十,left/right join
1)多left join
    表a 、表b、表c
	a left join b on 条件1 以a为主表
	a left join b on 条件1 left join c on 条件2 
	执行顺序是:
	先a和b进行连接,生成一张中间表d,然后再和c进行条件连接生成最后的表的数据 

2)多条件 on...and...where
on后面的条件是对前面的连接进行过滤的,不符合条件的部分显示为null
where是对整个查询结果进行过滤的,直接不显示结果,而不是显示为null

十一,ROWNUM

SELECT @rownum:=@rownum+1 FROM (SELECT @rownum:=0) r,orderitems;

对于这段sql的理解:

  1. 这是mysql中代替oracle中rownum的替换方式.
  2. 每次执行select语句时rownum变量的值在动态改变,相当于每次都是在拿先的常量去和orderitems表关联,而且常量和表关联笛卡尔积就是原来表本身.
  3. 这段sql验证了每次select语句都执行一次然后过滤数据,不是原来想象的查出所有数据再去过滤.
十二,连接的分类及理解
数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)

oracle中有 (+) 的一方代表有可以为空,即副表
十三,SQL的执行顺序

from—where—group by—having—select—order by

1,from和where从右向左

2.group by和order by从左往右

十四,列转行/行转列定义

**行转列:**把表中特定列的数据去重后做为列名;

**列转行:**可以说是行转列的反转,把表中特定列做为每一行数据对应列值;

第三种方法:借助辅助表,用case when then else end 转换

十五,mysql中临时表的创建

​ 1.mybatis中临时表操作

<!--创建临时表-->
<update id="createTempTable">
        CREATE TEMPORARY TABLE IF NOT EXISTS temp 
        SELECT * FROM settlement_temp
         WHERE settle_date=#{settleDate} AND LENGTH(operator) IN(16,32) AND  pay_status 			IN ('01','06') 
         ORDER BY settle_date,merchant_no
 </update>


 <!-- 删除临时表 -->
<update id="dropTempTable">  
    DROP TEMPORARY TABLE IF EXISTS settlement_temp;
</update>	
十六,mysql 添加表注释
CREATE TABLE groups(
  gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增',
  gname VARCHAR(200) COMMENT '列注释',
) COMMENT='表注释'

ALTER TABLE groups COMMENT '修改表注释'
ALTER TABLE groups MODIFY COLUMN gname VARCHAR(100) COMMENT '修改列注释'    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值