一、Oracle概述
Oracle(甲骨文公司),主打一款商业级的关系型数据库,甲骨文核心的产品线:1.Java 2.Mysql 3.Oracle Oracle:商业性-收费 国内现状: 互联网企业+小微企业:Mysql+PostgreSQL(PG) 大型国企、银行、电网:Oracle 互联网:偏重于Mysql 传统行业:Oracle(老项目) 互联网:头条、阿里、支付宝、百度、腾讯、京东、快手等 快速裂变、用户私域-爆发、海量用户、高并发、公开 传统行业:用友、金蝶、招商银行、中原银行、交通、国家电网 内部使用、并发量低
二、Oracle安装
略 客户端工具: 本机Oracle信息: 1.主机:ip地址 2.端口号:1521 3.账号:system 4.密码:qfzzjava
三、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没有自增约束
基本语句的操作:
--创建表
create table t_user2008(
id NUMBER primary key,
phone varchar2(11),
pass VARCHAR2(20),
ctime date
);
-- 新增
insert into t_user2008(id,phone,pass,ctime) values(1,'110','66666',
TO_DATE('2020-01-01 12:00:00', 'yyyy-MM-dd HH:mi:ss'));
insert into t_user2008(id,phone,pass,ctime) values(2,'210','66666',
TO_DATE('2020-01-01 12:00:00', 'yyyy-MM-dd HH:mi:ss'));
-- 查询
select * from t_user2008;
-- 修改
update t_user2008 set pass='168' where id=1;
-- 删除
delete FROM t_user2008 where id=1;
--查询条件
select * from t_user2008 where id in (12);
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 联合查询
-- 自然查询 笛卡尔积查询
select * from t_user2008,t_userlog2008;
-- 等值查询
select * from t_user2008 u ,t_userlog2008 ul where u.id=ul.userid;
-- 内连接
select * from t_user2008 u inner join t_userlog2008 ul on u.id=ul.userid;
--左外链接
select * from t_user2008 u left join t_userlog2008 ul on u.id=ul.userid;
--右外链接
select * from t_user2008 u right join t_userlog2008 ul on u.id=ul.userid;
--全连接
select * from t_user2008 u full join t_userlog2008 ul on u.id=ul.userid;
4.3 分页查询
-- 分页查询 rownum 每页显示2条 查询第一页的数据
select * from (select u1.*,ROWNUM rn from t_user2008 u1 where ROWNUM<3) u where u.rn>0;
-- 分页查询 配合排序使用
select * from (select u1.*,ROWNUM rn
from (select * from t_user2008 order by id desc) u1
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视图
视图:封装查询语句,操作视图就跟操作表一样
--视图:
--创建视图
create VIEW v_u2008 as
select * from (select u1.*,ROWNUM rn from t_user2008 u1 where ROWNUM<3) u where u.rn>0;
--使用视图
select * from v_u2008;
--删除视图
drop VIEW v_u2008;
六、Oracle触发器
触发器:满足一定条件就会自动执行定义好的SQL语句
--创建
create trigger t_triu2008 after insert on t_user2008
for each row
begin
insert into t_userlog2008(id,userid,content,ctime) values(:NEW.id,:NEW.id,'新增了用户-',to_date('2021-03-01','yyyy-MM-dd'));
end;
--触发使用
insert into t_user2008(id,phone,pass,ctime) values(3,'120','abcd',to_date('2021-03-01','yyyy-MM-dd'));
select * from t_userlog2008;
--删除
drop trigger t_triu2008;
七、序列
序列:Oracle独有的,专门用来生成数字的一种结构体 常常用来所为主键的自增
-- 序列
create sequence 序列名称
increment by 增量
start with 起始值
max|min 最大|最小
cache|nocache 是否缓存
cycle|nocycle 是否循环
--创建
create sequence seq_id2008;
--使用序列
insert into t_userlog2008(id,userid,content,ctime) values(seq_id2008.nextval,1,'测试序列',to_date('2021-03-01','yyyy-MM-dd'));
select seq_id2008.currval from t_userlog2008;
--删除
drop sequence seq_id2008;
重要属性:
nextval:下一个值
currval:当前值
八、Oracle函数
函数:实现特定功能的代码块 返回值
-- 函数
create FUNCTION f_u2008(n1 NUMBER,n2 NUMBER) return NUMBER
as
begin
return n1+n2;
end;
--使用
select f_u2008(id,userid) from t_userlog2008;
-- 删除
drop FUNCTION f_u2008;
九、Oracle存储过程
存储过程:也是函数的一种,只是没有返回值 参数类型: 1.输入参数-只读 2.输出参数-只写 3.输入 输出参数-读写
--存储过程
--新建
create PROCEDURE pro_u2008(n1 in number,n2 in number,n3 out number)
as
begin
n3:=n1+n2;
end;
--使用
DECLARE n NUMBER :=0;
begin
pro_u2008(1,2,n);
dbms_output.put_line(n);
end;
-- 删除
drop PROCEDURE pro_u2008;
十、Oracle索引
索引:提高查询的效率 底层存储结构:1.BTree索引 2.位图索引 逻辑划分: 1.主键索引 2.唯一索引 3.普通索引 4.复合索引
--索引
--创建索引
create index i_u2008 on t_user2008(phone,pass);
--删除索引
drop index i_u2008 on t_user2008;