Oracle学习一
2016-12-05 11:28
429 查看
学习记录使用oracle语句,以备查询。
修改表结构:
- 1、修改表中字段可以为空
ALTER TABLE [表名] MODIFY [表字段] NULL
2、修改表中字段名
ALTER TABLE [表名] rename column [ 旧名] to [新名]
ORACLE SEQUENCE
- 创建sequence
create sequence [序列名]
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
CREATE SEQUENCE MESSAGE_ALL_LOG_ID_SEQ
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1
NOCACHE
(1)rowid是物理存在的,表示记录在表空间中的唯一位置id,在数据库中是唯一的,rowid相对于表来说就像表中的一般列。
(2)rownum是一个序列,是oracle数据库从数据文件或数据缓存区中读取数据的顺序。
鉴于rownum的特殊之处,下面对几种现象进行说明。
1、 select rownum,t.* from DEVICEINFO t where rownum!=10为何返回的是前9条数据?
select rownum,t.* from DEVICEINFO t where rownum<10返回的也是前9条数据
因为rownum为9后,取的记录的rownum为10,因条件为 !=10,所以删掉。然后取下一条,其rownum又是10,也删掉。以此类推,所以只会显示前面9条记录。
2、为什么rownum >1时查不到一条记录,而 rownum >0或rownum >=1 却总显示所有记录
这是因为rownum是在查询到的结果集后,再加上去的,它总是从1开始的。
3、为什么 select rownum,t.* from DEVICEINFO t where rownum between 0 and 10或者between 1 and 10都能查询到前10条数据,而between 2 and 10什么都查不到?
因为rownum都是从1开始,参考上面的1理解。
从上面的可知,任何时候想把rownum = 1这条记录抛弃是不对的。它在结果集中是不可或缺的。 少了rownum=1就像空中楼阁一般不能存在。所以,rownum条件要包含到1。
下面运用到的表DEVICEINFO,表结构的部分字段如下:
修改表结构:
- 1、修改表中字段可以为空
ALTER TABLE [表名] MODIFY [表字段] NULL
2、修改表中字段名
ALTER TABLE [表名] rename column [ 旧名] to [新名]
ORACLE SEQUENCE
- 创建sequence
create sequence [序列名]
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
CREATE SEQUENCE MESSAGE_ALL_LOG_ID_SEQ
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1
NOCACHE
rownum与rowid
虽然rownum和rowid都是oracle数据库中的伪列,但是二者之间还是存在根本的差别的。它们的存在方式不同:(1)rowid是物理存在的,表示记录在表空间中的唯一位置id,在数据库中是唯一的,rowid相对于表来说就像表中的一般列。
(2)rownum是一个序列,是oracle数据库从数据文件或数据缓存区中读取数据的顺序。
鉴于rownum的特殊之处,下面对几种现象进行说明。
1、 select rownum,t.* from DEVICEINFO t where rownum!=10为何返回的是前9条数据?
select rownum,t.* from DEVICEINFO t where rownum<10返回的也是前9条数据
因为rownum为9后,取的记录的rownum为10,因条件为 !=10,所以删掉。然后取下一条,其rownum又是10,也删掉。以此类推,所以只会显示前面9条记录。
2、为什么rownum >1时查不到一条记录,而 rownum >0或rownum >=1 却总显示所有记录
这是因为rownum是在查询到的结果集后,再加上去的,它总是从1开始的。
3、为什么 select rownum,t.* from DEVICEINFO t where rownum between 0 and 10或者between 1 and 10都能查询到前10条数据,而between 2 and 10什么都查不到?
因为rownum都是从1开始,参考上面的1理解。
从上面的可知,任何时候想把rownum = 1这条记录抛弃是不对的。它在结果集中是不可或缺的。 少了rownum=1就像空中楼阁一般不能存在。所以,rownum条件要包含到1。
oracle分页
根据上面对rownum、rowid的理解。将其运用到分页中,下面运用到的表DEVICEINFO,表结构的部分字段如下:
SELECT * FROM DEVICEINFO WHERE ROWID IN (SELECT RID FROM (SELECT ROWNUM RN, RID FROM (SELECT ROWID RID, EMPNO FROM DEVICEINFO ORDER BY SERIALNO DESC) WHERE ROWNUM <= ( (currentPage-1) * pageSize + pageSize )) --每页显示几条 WHERE RN > ((currentPage-1) * pageSize) ) --当前页数 ORDER BY SERIALNO DESC;
相关文章推荐
- 开始学习oracle 10g罗
- oracle plsql 学习四
- Oracle安装与学习
- ORACLE常用函数学习记录
- 轻松学习贯穿Oracle的25条基本知识
- Oracle 学习笔记
- Oracle学习:权限
- hibernate学习(一)hibernate.cfg.xml文件连接mySql、Oracle、SqlServer配置
- Oracle学习(二)--启动与关闭
- Oracle之PL/SQL学习笔记
- oracle 学习笔记
- Oracle学习(五)--sql查询(包含子查询)
- oracle 学习笔记 - 查看 SQL 执行计划
- Oracle 学习SQL
- Oracle GoldenGate学习之Goldengate介绍
- oracle学习之一(新建用户和用户管理)
- oracle times ten 学习笔记
- oracle学习心得探讨
- oracle学习总结(二)
- oracle中pro*c的学习