Oracle
-
什么是数据库?
存储数据的仓库-
优点:
1.可存储大量数据
2.方便检索
3.保持数据的一致性、完整性
4.安全,可共享 -
解决的问题?
数据的持久化(把数据写到磁盘中)
-
-
用户管理: (系统管理员管理用户)
system /sys 系统管理员-
创建用户:
语法: create user 用户名 identified by 密码;注意:
-
管理员才能创建用户
-
创建用户需要授权才能登陆 管理员要给用户授权
-
-
用户授权:
权限 删除,添加,查询,修改
数据库中的角色: connect、resource、 dba; 授权: 可以给角色 获取权限
语法: grant 角色、权限 to 用户名;
-
-
表的操作
-
表的创建
语法:
create table t_name(
字段1 数据类型1(数据长度),
字段2 数据类型2(数据长度),
字段3 数据类型3(数据长度),
…
); -
删除表:
drop table 表名 [cascade consistent]; -
表的字段添加
alter table 表名 add 字段名 字段类型;
-
修改字段类型
alter table 表名 modify 字段 字段类型 -
修改字段名:
alert table 表名 rename column 源字段 to 新字段; -
删除字段
alter table 表名 drop column 字段名;
-
-
Oracle中数据类型
- 字符型
- char 字符型[长度固定] 能够存储最大长度是2000 个字节
- varchar2 字符型[长度是可变] 能存存储最大长度是4000字节
- long 字符型[大型字符] 能存存储最大2G文本
- 数据型
- number 数值型 可以存储小数 可以存储整数 默认长度是32位 最高精度38位
- 时间型
- date 日期 精确到秒 2019-9-7:11:22:33
- timestamp 时间戳 精确到 秒后面的6位 2019-9-7:11:22:33.000000
- 大数据类型 LOB
- blob 存储大型二进制文件
- clob 存储字符文件,类似 long
- 字符型
-
约束
-
非空约束 not null
-
.默认值的约束 default ‘’
-
唯一约束 unique
-
主键约束 unique + not null
-
外键约束:外键是从表中重复出现,在主表中作为主键存在
-
alter table t_stu add constraint fk_stu_class foreign key(classId) references t_class(cid);
-
外键的特点:
1. 外键可以在从表中重复出现 ,他在主表中是主键
2. 一张表可以有多个外键
3. 外键可以为null
4. 外键的作用是关联多种表,可以建立表之间的关系 (一对一 一对多 多对多)
5. 删除主表时候 如果 从表有使用主表的数据 是不能删除的, 从表的数据可以直接删除
6. 2表关联了 先删除 从表 在删除主表
7. 关键是多表查询单 必要条件
-
-
check约束: 某个字段可以在一定的设置范围存储
- alter table t_stu add constraint ck_stu_age check(sage in (18,19,20));
-
DML data manipulation language
-
INSERT
- insert into 表名(字段1,字段2…) values(val1,val1 …);
- insert into 表名 values (val1,val2…)
- create table t_stu_copy1 as select * from t_stu;复制( where 1 != 1 不把数据查出来 )
- 序列的使用方式:
- nextval: 获取下一值的序列
- currval; 获取当前会话的序列
-
UPDATE
- update 表名 set 字段1= val1,字段2=val2 where 判断条件;
-
DELETE
- delete from 表名 where 条件
-
SELECT
-
单表查询:
-
基础查询 select 字段 /as [别名]/ from 表名
- 去重复 distinct
- select ‘编号:’ || empno || ‘姓名:’|| ename 员工信息 from emp;字段合并
-
条件查询 select 列名 from 表名 where 判断条件;
-
模糊查询 select 列名 from 表名 like 判断条件;
-
排序查询 select * from table where 条件order by 字段;(asc/desc)
-
聚合函数 + 分组
-
字符函数 SUBSTR(x,start[,length]) 返回x的字串,从staart处开始,截取length个字符,缺 省length,默认到结尾。
-
数字函数 ROUND(X[,Y]),四舍五入;TRUNC(x[,y]),直接截取,不四舍五入。
-
日期函数 EXTRACT(fmt FROM d),提取日期中的特定部分。 fmt为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。
-
日期转换函数 to_date : 将字符串转换成日期
to_char : 将日期转换成字符串
-
其他函数 nvl(column, value) 如果column为空,返回value,否则返回x。
-
-
子查询
-
分页查询
-
-
多表从查询:
-
合并结果集
- union 去除重复并且合并; union all 不去重复的记录
-
连接查询
-
交叉连接 select * from emp,dept;
会产生很大的结果集(15 * 4 ) 60 性能低,大量无意义数据
-
等值连接 select * from emp,dept where emp.deptno = dept.deptno;
同样产生60条数据,只是通过过滤显示解决无意义数据
-
内连接 select * from emp e inner join dept d on (e.deptno = d.deptno);
-
外连接
-
左外连接: 把左表所有数据查询出来
select * from emp e left join dept d on e.deptno = d.deptno;
-
右外连接: 把右表所有的数据查出来
select * from emp e right join dept d on e.deptno = d.deptno;
-
全外连接: 把2表不满足的记录保留
select * from emp e full join dept d on e.deptno = d.deptno;
-
-
自然连接 select * from emp e natural join dept d; //与内连接的区别??
-
-
子查询 查询语句中嵌套查询:
-
分组查询
-
结构
seledct * from t
where 条件
group by 分组字段
order by 字段
having 条件;
-
-
分页查询
- 结构
select t.ename,t.empno,t.num from (
select ename,empno,rownum num from emp where rownum <= pageSize * currentPage ) t
where t.num >= (currentPage - 1) * pageSize +1 ;
-
-