Oracle学习笔记1

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);
原文地址:https://www.cnblogs.com/Zs-book1/p/11209929.html