oracle数据库对象:序列,表,视图,簇
序列:在oracle当中是对象的一种。
序列:
序列用于产生唯一序号的数据库对象,可以同时为多个数据库用户依次生成不重复的连续整数,通常使用序列自动生成表中的主键值.
查询数据字典中序列的信息
user_sequences
select sequence_name,increment_by,last_number from user_sequences;
创建默认的序列
create sequence seq_fangfan;
修改序列步长
alter sequence seq_fangfan increment by 5;
删除序列
drop sequence seq_fangfan;
create table fangfan_test (id number(4) primary key,name varchar2(20));
insert into fangfan_test values(seq_fangfan.nextval,'fangfan');
select * from fangfan_test;
select seq_fangfan.currval from dual;
select seq_fangfan.nextval from dual;
从序列数据字典当中查看序列信息
这里呢,值得说明的是要查询数据字典的信息都应该采用大写,否则不能得到结果
select * from user_sequences where sequence_name='SEQ_FANGFAN';
视图:
[]表示可选
create [or replace] view emp_view as select empno,ename,sal from emp;
create view emp_info_view1(deptno,avgsal,empcount) AS select deptno,avg(sal),count(*) From emp Group by deptno;
在创建视图的时候可以加上with read only 后对视图的操作将不能改变原来表中的数据屏蔽对视图的dml操作
create or replace emp_info_view2 as select empno,ename from emp with read only;
对视图的数据操作和表基本一致
索引
索引是一种数据库优化的技术和支持,只是为了提高查询的效率.快速定位数据,减少io操作读写硬盘的次数.
索引适合大量读少量修改数据量很大并且每次只需要查询少量数据的表
create table fangfan_test1 (id number(4),name varchar2(20));
create index fangfan_index on fangfan_test1(id);
select i.index_name,c.column_name from user_indexes i,user_ind_columns c where i.index_name=c.index_name and i.table_name='FANGFAN_STUDENT';
创建基于函数的索引(只有使用该函数才可以发挥作用)
create index fangfan_index1 on fangfan_test1(UPPER(name));
select UPPER(name) from fangfan_test1;
Top-N
这里是mysql当中的查询语句,这句表示查询工资大于2000的员工的前三名
select rownum,empno,ename,sal from emp where sal>2000 and rownum<4;
select empno,ename,sal from emp;
select rowid,empno,ename,sal from emp;
select rownum,empno,ename,sal from emp;
select rownum,empno,ename,sal from emp where sal>2000;
在Oracle这种方式不可以,可以采用下面的语句:
select rownum,info.empno,info.ename,info.sal from (select empno,ename,sal from emp where sal>2000 order by sal desc) info where rownum<4;