欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql与Oracle的区别(1)

程序员文章站 2024-01-28 10:52:40
...

第一章 MySql与Oracle的函数区别

一,to_date和to_char

Oracle Mysql
字符串–>日期 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小时制

二,分页函数

Oracel Mysql
函数 Rownum/rownum=1 Limit/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。  

三,判空函数

Oracle Mysql
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

四,函数

Oracle Mysql SqlServer
with…as…函数 Y N Y
Rownum字段 Y N N
|| Y N(concat代替) N
时间 SYSDATE NOW()
序列 sequence.nextVal() 自定义函数

五,字符串函数

Oracle Mysql
to_char() CAST(123 AS CHAR)/CONCAT(123,’’)

六,左外连接/右外连接

Oracle Mysql
oracle左连接,右连接可以使用(+)来实现 Mysql只能使用left join ,right join等关键字.
""作为参数传入后,在oracle中将识别为null ““作为参数据传mysql还是””

七,递归

Oracle Mysql
select * from dual start with … connect by … select * from dual where orgNo like ‘**%’

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

八,别名

别名 Oracle Mysql
delete语句 Y N
update语句 Y N

九,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:[email protected]+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 '修改列注释'