一、Oracle概述

Oracle(甲骨文公司),主打一款商业级的关系型数据库,甲骨文核心的产品线:1.Java 2.Mysql 3.Oracle Oracle:商业性-收费 国内现状: 互联网企业+小微企业:Mysql+PostgreSQL(PG) 大型国企、银行、电网:Oracle 互联网:偏重于Mysql 传统行业:Oracle(老项目) 互联网:头条、阿里、支付宝、百度、腾讯、京东、快手等 快速裂变、用户私域-爆发、海量用户、高并发、公开 传统行业:用友、金蝶、招商银行、中原银行、交通、国家电网 内部使用、并发量低

二、Oracle安装

image.png 客户端工具: image.png 本机Oracle信息: 1.主机:ip地址 2.端口号:1521 3.账号:system 4.密码:qfzzjava image.png

三、Oracle基本操作

SQL:结构化查询语言 用来操作关系型数据库的语言 分类: 1.DDL 2.DML 3.DQL 4.DCL 5.TPL 6.CCL Oracle的数据类型: 1.数字类型: Number、integer、float 2.字符串类型: varchar2 nvarchar2 char 3.日期类型: date 4.大数据类型: long blob 每个可以存储2Gb-1 Oracle的约束条件: 1.主键约束 2.外键约束 3.默认约束 4.非空约束 Oracle没有自增约束

基本语句的操作:

  1. --创建表
  2. create table t_user2008(
  3. id NUMBER primary key,
  4. phone varchar2(11),
  5. pass VARCHAR2(20),
  6. ctime date
  7. );
  8. -- 新增
  9. insert into t_user2008(id,phone,pass,ctime) values(1,'110','66666',
  10. TO_DATE('2020-01-01 12:00:00', 'yyyy-MM-dd HH:mi:ss'));
  11. insert into t_user2008(id,phone,pass,ctime) values(2,'210','66666',
  12. TO_DATE('2020-01-01 12:00:00', 'yyyy-MM-dd HH:mi:ss'));
  13. -- 查询
  14. select * from t_user2008;
  15. -- 修改
  16. update t_user2008 set pass='168' where id=1;
  17. -- 删除
  18. delete FROM t_user2008 where id=1;
  19. --查询条件
  20. select * from t_user2008 where id in (12);
  21. select * from t_user2008 where phone like '1%';

四、Oracle的复杂查询

4.1 子查询

将查询的结果作为另一个查询的条件 要求:查询的结果只能是单列的结果 —子查询 select * from t_user2008 where id in (select userid from t_userlog2008);

4.2 联合查询

  1. -- 自然查询 笛卡尔积查询
  2. select * from t_user2008,t_userlog2008;
  3. -- 等值查询
  4. select * from t_user2008 u ,t_userlog2008 ul where u.id=ul.userid;
  5. -- 内连接
  6. select * from t_user2008 u inner join t_userlog2008 ul on u.id=ul.userid;
  7. --左外链接
  8. select * from t_user2008 u left join t_userlog2008 ul on u.id=ul.userid;
  9. --右外链接
  10. select * from t_user2008 u right join t_userlog2008 ul on u.id=ul.userid;
  11. --全连接
  12. select * from t_user2008 u full join t_userlog2008 ul on u.id=ul.userid;

4.3 分页查询

  1. -- 分页查询 rownum 每页显示2 查询第一页的数据
  2. select * from (select u1.*,ROWNUM rn from t_user2008 u1 where ROWNUM<3) u where u.rn>0;
  3. -- 分页查询 配合排序使用
  4. select * from (select u1.*,ROWNUM rn
  5. from (select * from t_user2008 order by id desc) u1
  6. where ROWNUM<3) u where u.rn>0;

4.4 其他操作

分组查询、聚合函数 select count(*),max(id),min(id),avg(id),sum(id) from t_user2008; group by having max min avg sum count

五、Oracle视图

视图:封装查询语句,操作视图就跟操作表一样

  1. --视图:
  2. --创建视图
  3. create VIEW v_u2008 as
  4. select * from (select u1.*,ROWNUM rn from t_user2008 u1 where ROWNUM<3) u where u.rn>0;
  5. --使用视图
  6. select * from v_u2008;
  7. --删除视图
  8. drop VIEW v_u2008;

六、Oracle触发器

触发器:满足一定条件就会自动执行定义好的SQL语句

  1. --创建
  2. create trigger t_triu2008 after insert on t_user2008
  3. for each row
  4. begin
  5. insert into t_userlog2008(id,userid,content,ctime) values(:NEW.id,:NEW.id,'新增了用户-',to_date('2021-03-01','yyyy-MM-dd'));
  6. end;
  7. --触发使用
  8. insert into t_user2008(id,phone,pass,ctime) values(3,'120','abcd',to_date('2021-03-01','yyyy-MM-dd'));
  9. select * from t_userlog2008;
  10. --删除
  11. drop trigger t_triu2008;

七、序列

序列:Oracle独有的,专门用来生成数字的一种结构体 常常用来所为主键的自增

  1. -- 序列
  2. create sequence 序列名称
  3. increment by 增量
  4. start with 起始值
  5. max|min 最大|最小
  6. cache|nocache 是否缓存
  7. cycle|nocycle 是否循环
  8. --创建
  9. create sequence seq_id2008;
  10. --使用序列
  11. insert into t_userlog2008(id,userid,content,ctime) values(seq_id2008.nextval,1,'测试序列',to_date('2021-03-01','yyyy-MM-dd'));
  12. select seq_id2008.currval from t_userlog2008;
  13. --删除
  14. drop sequence seq_id2008;
  15. 重要属性:
  16. nextval:下一个值
  17. currval:当前值

八、Oracle函数

函数:实现特定功能的代码块 返回值

  1. -- 函数
  2. create FUNCTION f_u2008(n1 NUMBER,n2 NUMBER) return NUMBER
  3. as
  4. begin
  5. return n1+n2;
  6. end;
  7. --使用
  8. select f_u2008(id,userid) from t_userlog2008;
  9. -- 删除
  10. drop FUNCTION f_u2008;

九、Oracle存储过程

存储过程:也是函数的一种,只是没有返回值 参数类型: 1.输入参数-只读 2.输出参数-只写 3.输入 输出参数-读写

  1. --存储过程
  2. --新建
  3. create PROCEDURE pro_u2008(n1 in number,n2 in number,n3 out number)
  4. as
  5. begin
  6. n3:=n1+n2;
  7. end;
  8. --使用
  9. DECLARE n NUMBER :=0;
  10. begin
  11. pro_u2008(1,2,n);
  12. dbms_output.put_line(n);
  13. end;
  14. -- 删除
  15. drop PROCEDURE pro_u2008;

十、Oracle索引

索引:提高查询的效率 底层存储结构:1.BTree索引 2.位图索引 逻辑划分: 1.主键索引 2.唯一索引 3.普通索引 4.复合索引

  1. --索引
  2. --创建索引
  3. create index i_u2008 on t_user2008(phone,pass);
  4. --删除索引
  5. drop index i_u2008 on t_user2008;