oracle数据库的市场份额大,属于大中型数据库,安全性强,稳定性强,多用户,分布式支持力度大,可以移植,兼容性好;
oracle数据库是一个关系型数据库,它与mysql数据库有很多不同的地方。
在oracle数据库中,数据类型,常用的有:
1.字符串型
定长字符串:char(长度)最多存储2000字符
可变字符串:varchar2() 最多存储4000字符
2.数字类型
Number(M,N)M:总长度,N:小数位数
3.日期类型
Date:日期类型:世纪,年月日时分秒 7字节
Timestamp:精确秒具体到6位
4.大对象
CLOB:c:字符;4G
BLOB:B:二进制
--1. 在mysql中,我们可以使用select 1;这句sql语句时可以查到结果的,但是在oracle中,这是一个不完整的sql语句,不能被执行, select 1 from dual; --因此有一个虚拟的表用来补充代码的完整性 --2. 在mysql中,建表时可以设置主键自增,但是在oracle中,没有这个功能,但是相对的oracle有序列,可以通过序列实现mysql中的自增效果 create sequence seq1 --创建一个名为seq1的序列 start with 1 --起始值为1 increment by 1 --每次自增数字为1 maxvalue 100 --最大值 cycle; --循环 -- 正常情况新建序列只写前两条就够了, 其他的都是用默认的值就可以,查询序列的值 select seq1.nextval from dual; --查询下一个值 select seq1.currval from dual; --查询序列当前的值 --序列的具体用法 insert into emp (empno, ename) VALUES (seq1.nextval,'张三'); -- 3.在mysql中分页查询使用的时limit来查询,但是在oracle中没有limit,在oracle中使用分页查询需要用到伪列rownum select rownum,e.* from emp e where rownum <=10; --可以看到每一行前都有个行号,但是这个行号是变化的,当读取到一个数据时,就给这个数据的行号赋值,因此不能同通过>来取值 --接下来的这句语句是错误的,因为执行时,会判断条件,如果条件满足,搜索到数据,就给数据行号,因此rownum初始值为0,0>1,条件不满足,找不到数据 select rownum,e.* from emp e where rownum>1 and rownum <=10; --错误的sql语句 --在oracle中正确的分页要好好的利用伪列,既然伪列是虚拟的,那么就把它实例化了,正确的分页语句如下 select * from (select rownum r,e.* from emp e where rownum<=10) e where e.r>5; --上面语句的解释为先查询一个有位列的表,然后给位列起个别名,将这个有位列的表作为数据表来根据r的值做判断 --不相关子查询,在之前的语句中,都是先查询条件中的sql语句,然后在执行父类的sql语句,即子类的sql语句单独拿出来也能运行, --这种sql语句叫做不相关子查询,执行顺序是先子后父,如下 select * from emp where empno in (select mgr from emp); --相关子查询,是先执行父查询,再执行子查询,单独执行子查询是错误的,如下 select * from emp e where exists(select * from emp e2 where e.empno=e2.mgr);