MySQL和Oracle区别

以下记录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):
			updateset=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 分组项,聚合函数 fromgroup 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 (子查询)
						

你可能感兴趣的:(MYSQL,oracle,mysql,数据库)