oracle和mysql脚本区别

1. 查询前面N条数据

Oracle通过rownum来获取前N条记录,MySql通过limt来获取。Oracle中rownum作为where条件的一部分,而MySql中limit不是where条件的
一部分

----例子:查询
Oracle

select * from user where rownum<=100

MySql

select * from user limt 100
2. 数据更新

Oracle和MySql用update语句更新数据的话没区别,但是若想先查询出来,然后再编辑的话,Oracle需要加上t.rowid或者for update

----例子:将小明的年龄更改为30岁—

Oracle和MySql都通用

update user set age=30 where name='小明'

Oracle

select u.*,u.rowid from user u where u.name='小明';
或者
select u.* from user u where u.name='小明' for update;
3. 删除数据

Oracle中删除数据可以不加FROM,但是MySql必须得加

----例子:删除小明的记录—

Oracle

delete from user where name='小明'delete user where name='小明'

MySql

delete from user where name='小明'
4. 时间格式化

将字符串型时间转换为时间类型:
Oracle用to_date()函数,MySql用str_to_date()函数
将时间转换为字符串型时间:
Oracle用to_char()函数,MySql用date_format()函数

----例子1:小强的生日为2003年12月11日,将小强的信息插入表格,其中出生日期birthday为日期型—

Oracle

insert into user (ID, name, age, birthday)
values ('123','小强', 17,to_date('11-12-2003'));
如果到时分秒的话:to_date('18-09-2021 14:54:48', 'dd-mm-yyyy hh24:mi:ss')

MySql

insert into user (ID, name, age, birthday)
values ('123','小强', 17,str_to_date('11-12-2003'));

----例子2:小强的生日为当前时间,将小强的信息插入表格,其中出生日期birthday为字符串型—
Oracle

insert into user (ID, name, age, birthday)
values ('123','小强', 1,to_char(SYSDATE,'YYYY-MM-DD'));

MySql

insert into user (ID, name, age, birthday)
values ('123','小强', 1,date_format(NOW(),'%Y-%m-%d'));
5. trunc()函数

Oracle中用trunc(22.333)取整数,也可以用trunc(22.333,0),0表示对前面的数据取0个小数点,MySql只能truncate(22.333,0),不能去掉0
trunc(22.333,2)、truncate(22.333,2)取两位小数
Orcale用trunc(Sysdate)返回当前日期,MySql用cast(now() as date)返回当前日期,如果需要返回时间,用cast(now() as datetime)

Oracle

select trunc(22.33) from dual;
select trunc(Sysdate) from dual;

Mysql

select truncate(22.333,2) from dual;
select cast(now() as datetime) from dual;

----例子:查询本周出生的宝宝数据 birthday为日期型—

Oracle

slect * from user where birthday>=trunc(next_day(sysdate - 8, 1) + 1) and birthday <trunc(next_day(sysdate - 8, 1) + 8)

next_day()函数用法,此处有掌声

6.当前时间

Oracle中用SYSDATE返回2022/8/17 17:54:36,MySql用now()返回2022-08-17 23:59:10

Oracle

select Sysdate from dual;

Mysql

select now() from dual;
7.空数据排序

Oracle中用nulls first和nulls last分别可指定空数据在前面和空数据在后面,如果不用的话,desc降序空数据会在前面,asc升序空数据会在最后面。
MySql可通过if 和isnull函数来控制

Oracle

select * from user t order by birthday asc nulls first; 指定空数据在前面
select * from user t order by birthday desc nulls last; 指定空数据在后面
7.临时表

当涉及到多个表,查询条件比较多时,用临时表处理查询会优雅很多。Oracle中用with来构建一个临时表,Mysql不支持with,用小括号的方式来构建临时表。

Oracle

with tableTmp as(
SELECT T2.GOVERNING_TEAM,T2.ID FROM test1 T1 INNER JOIN test2 T2
ON T1.ID = T2.KEY_SECTION_ID
WHERE T1.DELETE_FLAG = 1
GROUP BY T2.GOVERNING_TEAM,T2.ID)
SELECT GOVERNING_TEAM 班级,COUNT(1) amount FROM tableTmp
GROUP BY GOVERNING_TEAM

Mysql

select b.GOVERNING_TEAM 班级,COUNT(1) amount
from(
SELECT T2.GOVERNING_TEAM,T2.ID FROM test1 T1 INNER JOIN test2 T2
ON T1.ID = T2.KEY_SECTION_ID
WHERE T1.DELETE_FLAG = 1
GROUP BY T2.GOVERNING_TEAM,T2.ID
) b group by b.GOVERNING_TEAM
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值