以下记录Oracle和MySQL的区别,之前学过MySQL,但没学过Oracle,又想了解一下两者之间的区别就在B站看了一些视频,这边做一个简单的记录。由于没系统学过Oracle,可能不是很全面,欢迎大家来指教、补充。
数据库操作:
库表操作:
库的操作:
创建数据库:create database 库名称 charset='utf8';
create tablespace 表空间名称;
删除数据库:drop database 库名称
表的操作:
创建表:
数据类型:整型: int
浮点型:
float
numeric(m,n)精确小数点
decimal(m,n)精确小数点
字节型:
char(m) 不可变长度的字符型
varchar(m) 可变长度的字符型 --MySQL
varchar2(m) 可变长度的字符型 --Oracle,版本2
其它:
data:日期
time:时间
datatime:日期时间
set类型:mysql有,Oracle没有,Oracle用检查约束可以实现
约束:
主键约束
外键约束
唯一性约束
默认值约束
非空约束
自增长约束:
mysql有,叫auto_increment
oracle没有,但可以用create sequence 序列名 来实现
检查约束:
mysql有,但不生效
Oracle有,生效
建表语句:
create table 表名称(字段名 类型 约束,字段名 类型 约束..);
mysql后面可以加charset='utf8',oracle不能加
删除表:
drop table 表名称
查看表:
show tables; MySQL操作
select * from tab; oracle操作
数据的增删改:
增(insert):
insert into 表名称 values(值1,值2);
oracle不支持非标准语句,比如MySQL可以将values->value
删(delete):
delete from 表名称;
truncate table 表名称;
改(update):
update 表 set 列=值 where 条件;
查询操作:
单表查询:
单表查询:
标准语句:select * from 表名称;
查日期:
select current; MySQL不需要加from子句
select sysdate from dual; oracle需要加from子句,有一个dual的伪表
查询显示列:select 列名,列名.. from 表名;
查询去重复:select distinct 列名 from 表名;
查询用表达式:select 表达式 as 别名 from 表名;
查询对空值进行处理:
select 表达式 +ifnull(列名,0) from 表名;MySQL用ifnull函数
select 表达式 +NVL(列名,0) from 表名; Oracle用NVL函数
排序:order by: selct * from 表名 order by 列名 desc;
只显示前面的三行:
select * from 表名 limit 3; MySQL用limit
Oracle数据库要用rownum虚拟列来实现,这里面有些注意事项:
例:select * from ( select rownum rn,表名.* from 表名) where rn>5
WHERE子句:
等于查询
不等于查询:
mysql的 select * from 表名 where 列名 <=>null;等于空 Oracle没有
模糊查询like:
select * from 表名 where 列名 like 'z%';
select * from 表名 where ename rlike 'z%'; mysql有rlike操作(支持正则)
空值处理:select * from 表面 where 列名 is null;
AND OR NOT 操作
区间查询 select * from 表名 where 列名 between 小值 and 大值;
集合查询 select * from 表名 where 列名 in (值1,值2,值3,..);
分组查询:
分组的语法:select 分组项,聚合函数 from 表 group by 分组项
五大聚合函数:
count() 统计个数
sum() 求和
avg() 求平均值
max() 求最大值
min() 求最小值
having二次筛选和where筛选的区别
多表查询:
等值连接:
等值连接:select a.*,b.* from a,b where a.id=b.id;
内连接:select a.*,b.* from a join b on a.id = b.id;
自身表连接:把这个表看成a,又看成b,但要出现两次
不等值连接:
左右连接:
左连接和右连接的区别
左右连接的实现:
select a.*,b.* from a left join b on a.id=b.id;
select e.*,d.* from d,e where d.字段=e.字段(+); Oracle独有
子查询:
子查询在from子句中,看成一张表
子查询在where子句,把它看成一个数值:WHERRE字段=(子查询)
子查询在where子句,把它看成一组值:WHERRE字段 IN (子查询)