oracle学习第五天:rownum/视图/序列/索引

oracle学习第五天:rownum/视图/序列/索引

1、oracle表和字段是有大小写的区别。oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写。
2、我们在使用navicat使用可视化创建数据库时候,navicat自动给我们加上了“”。这样我们在创建数据库时实际的代码是这样的:(通过到处sql语句的文件,这样就不难理解我们为什么找不到表了。)

rownum

截断表:truncate table 会直接把表删除了而不会回滚,一般这个操作要谨慎

ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。

  • 范例:查询emp表带有rownum列
select ROWNUM,e.* from emp e;
  • 我们可以根据rownum来取结果集的前几行,比如前5行
select ROWNUM,e.* from emp e where ROWNUM<6;

但是我们不能取到中间几行,因为rownum不支持大于号,只支持小于号,如果想 实现我们的需求怎么办呢?答案是使用子查询,也正是oracle分页的做法。

  • 不使用with as 语法
select *
from (select rownum rm, a.* from (select * from emp) a where rownum < 11) b where b.rm > 5;
  • 使用with as 语法
with su as (
    select ROWNUM rm,e.* from (select * from emp) e where ROWNUM<11
)
select *
from su where su.rm>5;

视图

oracle创建视图权限不足解决
sysy用户登录后执行下面的语句进行赋权

grant connect,resource,dba to scott;

视图就是封装了一条复杂查询的语句。
语法1.:CREATE VIEW 视图名称 AS 子查询
创建视图的时候 查询的sql不能有重复的列名

  • 范例:建立一个视图,此视图包括了20部门的全部员工信息
create view emp20 as
    select *From EMP e where e.DEPTNO=20;
  • 删除视图
drop view EMP20;
  • 实例操作
create view threetable as
    (
    select e.EMPNO,e.ENAME,d.DEPTNO,d.DNAME,
           decode(s.GRADE,
                  1,'一级',
                  2,'二级',
                  3,'三级',
                  4,'四级',
                  5,'五级'
               ) grade,
           e1.EMPNO e1_empno,e1.ENAME e1_ename,
           decode(s1.GRADE,
                  1,'一级',
                  2,'二级',
                  3,'三级',
                  4,'四级',
                  5,'五级'
               ) grade1
    from emp e,emp e1,DEPT d,SALGRADE s,SALGRADE s1
    where e.MGR=e1.EMPNO and
            e.DEPTNO=d.DEPTNO and
        e.SAL between s.LOSAL and s.HISAL and
        e1.SAL between s1.LOSAL and s1.HISAL
    );

序列

在很多数据库中都存在一个自动增长的列,如果现在要想在oracle 中完成自动增长的功能, 则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。
序列虽然是给某个表使用,但是序列并没有绑定在某个表上,任何一张表使用这个序列都可以。

创建语法:
语法:CREATE SEQUENCE 序列名
[INCREMENT BY n] //自增
[START WITH n] //从几开始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] //最大值 最小值 无最大值
[{CYCLE|NOCYCLE}] // 循环序列 /非循环序列
[{CACHE n|NOCACHE}];//序列对缓存的使用 /不使用缓存
这些参数是可选的

  • 创建一个序列
create sequence seqpersonid start with 1 nomaxvalue ;

序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:
NextVal :取得序列的下一个内容
CurrVal :取得序列的当前内容
select seqpersonid.nextval from dual;
select seqpersonid.currval from dual;

  • 在插入数据时需要自增的主键中可以这样使用
insert into "person"("person_id", "name", "age", "gender", "address")
values (SEQPERSONID.nextval,'张三',23,'1','gfadga');

索引

索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低I/O次数,从而提高数据访问性能。(主键默认就是索引),索引不需要主动使用,根据索引列查询时就自动的使用了索引

  • 索引建立的原则是如果一个字段不经常查询,就不要建索引。
  • 索引分类
    • 单例索引
      单例索引是基于单个列建立的索引,比如:
      CREATE index 索引名 on 表名(列名)
    • 复合索引
      复合索引是基于两个列或者多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同,比如:
      create index 索引名 on 表(列名1,列名2);
      复合索引在where条件后的顺序必须和建立索引的顺序一致在这里插入图片描述
  • 索引的使用原则:
    在大表上建立索引才有意义
    在where字句后面或者是连续条件上建立索引
    索引的层次不要超过四层
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值