Loading

Oracle数据库高级学习笔记

Oracle 数据库高级

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。
优点:数据安全性强,稳定性强

1. 合并查询

在实际开发过程中,为了合并多个结果集,可以采用以下操作符:

  • union(并集去重复)
  • union all(并集不去重复)
  • intersect(交集)
  • minus(差集)
语法:
select 字段1, 字段2 from 表名 where 条件字段 = 值
结果集操作符
select 字段1, 字段2 from 表名 where 条件字段 = 值

注:结果集查询字段必须一模一样,字段顺序必须一样
在oracle语句中去除重复有三种:distinct、group、union

2. 序列

序列相当于一个数字生成器,生成一个唯一的数字,一般用于生成自增主键

2.1 创建格式
create sequence 序列名	`(序列名格式 = 表名_seq; / 序列名格式 = seq_表名;)`
increment by 1	          --每次的增量(步长)
start with 1	          --初始值
maxvalue (28个9)          --最大值
minvalue 1	          --最小值
cache 20	          --缓冲区大小
2.2 简单创建方式

creat sequence 序列名;

2.3 修改序列
alter sequence 序列名 属性名 属性值;

注:不能修改start with(初始值)
修改minvalue(最小值)时,不能大于下一个值
2.4 删除序列

drop sequence 序列名;

2.5 查询序列值
查看当前值:select 序列名.currval from dual;
查看下一个值:select 序列名.nextval from dual;

3. 视图(view)

视图是通过一条查询SQL语句产生的虚拟表,把查询SQL语句的结果集当成一张表视图一般用于查询

3.1 创建视图格式

create or replace view 视图名 as 查询语句

3.2 视图的优缺点
  • 优点:
    1. 视图可以选择性的去除表中部分数据,更灵活
    2. 用户可以通过简单的SQL语句查询出复杂的结果
    3. 视图独立性强,利于后期维护
    4. 安全性高,操作视图需要一定的权限,删除视图不影响物理表
    5. 相同的数据,可以产生不同的视图
  • 缺点:
    1. 视图并没有提高查询效率,什么时候查询视图,才会执行视图中的SQL语句,视图不会预编译的

4. 索引(优化查询)

4.1 索引的作用:

索引用来提高表的查询效率,相当于书的目录,根据页码快速查询到数据存放的位置,索引作用在字段

4.2 什么样的字段适合建索引?
  • 经常被查询的字段
  • 不为空且字段值不重复
  • 字段的值不经常改变
  • 主键默认建唯一索引(唯一约束默认建唯一索引)
  • 索引不是越多越好,一般一张表上最多添加2-3个索引
  • 如果索引过多,数据库添加数据和删除数据时效率就会变低,并且增加数据库负担
4.3 创建索引
  1. 普通索引
    create index 索引名字 on 表名(字段名)
  2. 唯一索引
    create unique index 索引名字 on 表名(字段名)
  3. 复合普通索引
    create index 索引名字 on 表名(字段名1,字段名2)
  4. 复合唯一索引(多个字段值相加不能重复)
    create unique index 索引名字 on 表名(字段名1,字段名2)
  5. 删除索引
    drop index 字段名字
  6. 重建索引
    alter index 索引名字 rebuild reverse
  7. 索引的使用
    在SQL语句汇总where条件使用到索引字段,自然会走索引,无需调用
  8. 以下情况不走索引
    • 复合索引必须多个字段同时被查询
    • 全模糊、前模糊查询不走索引
    • 索引字段不能作用于运算
    • 索引字段不能作用于函数
  9. 索引的优缺点
    • 优点:提高查询效率
    • 缺点:
      • 增加存储空间
      • 添加、修改、删除的效率降低

5. exists与in的区别

exists与in的作用是一样的,区别如下:

  • 外表大于内嵌的表使用in
  • 内嵌表大于外表使用exists

6. 如何优化SQL语句

  • 少用select *,查询几个字段就写几个字段
  • 能精确查询绝不模糊查询
  • 多表查询时减少临时表的产生,能用两张表查询绝不用三张表
  • 使用大数据表关联小数据表
  • 使用or代替in
  • 合理使用in与exists
  • where条件中能过滤掉大数据的放后面(where条件是从右到左执行的)

7. Oracle分页查询

7.1 oracle分页查询语句
select * from (
select t.*, rownum m from 表名 t where rownum <= ?
) where m >= ?
7.2 分页流
public class Page {
  1. 上一页
  2. 下一页
  3. 当前页
  4. 总页数
  5. 总条数
  6. 每页显示多少条
  7. 首页
  8. 尾页
  9. 搜索的开始位置
  10. 搜索的结束位置
  11. 结果集	
}

开始位置 =(当前页 - 1) * 每页显示多少条 + 1
结束为止 = 当前页 * 每页显示多少条

posted @ 2021-11-22 17:11  Schieber  阅读(764)  评论(1编辑  收藏  举报