文章目录
Oracle
重新用该用户登录
1 数据类型
字符型
(1) CHAR:固定长度的字符类型,最多存储 2000 个字节
(2) VARCHAR2:可变长度的字符类型,最多存储 4000 个字节 ==> 对应的是mysql的varchar
(3) LONG:大文本类型。 最大可以存储 2 个 G ==> 对应的是mysql的text
数值型
(1)NUMBER:数值类型,代表一切数字
(2) NUMBER(5):表示数字最多5位,最大可以存的数为 99999
(3) NUMBER(5,2):表示总长度5位,最大可以存的数为 999.99
日期型
(1) DATE:日期时间型,精确到秒
(2) TIMESTAMP:精确到秒的小数点后 9 位
二进制型
(1) CLOB:存储字符,最大可以存 4 个 G
(2) BLOB:存储图像、声音、 视频等二进制数据,最多可以存 4 个 G
2 代码演示
新增数据后,要提交,commit(F10)
修改表
添加字段
修改字段类型
修改字段名称
删除字段
删除表
drop table 表名称
使用工具进行表的增删改
字段信息
填写字段的名称,类型, [默认值],选择是否可以为空
3 关于主键 ID 的自增
在 oracle 中主键自增需要用到序列
新建序列
如果存在id为1的数据,会报错,违反唯一约束,再次执行就可以了,提交,然后就可以看到新增数据新增在原来的数据之后。
4 基于伪列的查询
在 Oracle 的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。
接下来学习两个伪列: ROWID 和 ROWNUM。
ROWID
表中的每一行在数据文件中都有一个物理地址, ROWID 伪列返回的就是该行的物理地址。使用 ROWID 可以快速的定位表中的某一行。 ROWID 值可以唯一的标识表中的一行。由于 ROWID 返回的是该行的物理地址,因此使用 ROWID 可以显示行是如何存储的。
ROWNUM
在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回 1,第二行返回 2,以此类推。通过 ROWNUM 伪列可以限制查询结果集中返回的行数。
结果发现没有显示任何记录。这是因为 rownum 是在查询语句扫描每条记录时产生的,所以不能使用大于符号,只能使用“小于”或“小于等于”,只用“等于”也不行。
所以我们需要采用子查询来完成,先让 rownum 全部生成,再进行筛选。
基于排序的分页
rownum顺序混乱,会导致前面的序号也是乱的。是因为 ROWNUM 伪列的产生是在表记录扫描是产生的,而排序是后进行的,排序时 r 已经产生了,所以排序后 r 是乱的。
怎么解决?很简单,我们只要再嵌套一层查询(一共三层),让结果先排序,然后对排序后的结果再产生 r,这样就不会乱了。
5 连接查询之Oracle方言
连接查询
聚合统计
sum,avg,max,min,count
分组聚合
select * from user group by userId;在mysql是可以用的,在Oracle是不对的。
Oracle 是正常的SQL标准
6 函数
单行子查询
所谓单行子查询及嵌套的查询只返回一条记录,对于这种查询结果,我们可以采用单行操作符号:=,>,>=,<,<=,<>
多行子查询
子查询返回了多条记录,就得采用多行操作符:in,any,all
字符函数
数值函数
日期函数
转换函数
其他函数
- 空值处理函数 NVL :只能指定不为null的值
NVL(检测的值,如果为 null 的值)
- 空值处理函数 NVL2:可以同时指定为null和不为null的值
NVL2(检测的值,如果不为 null 的值,如果为 null 的值)
- 条件取值 decode:翻译函数
作用:根据条件返回相应值(不是万能的,只适用于翻译值比较少的这种情况)
decode(条件,值 1,翻译值 1,值 2,翻译值 2,…值 n,翻译值 n,缺省值)
- 条件取值 case when then
行列转换
分析函数
主要用于数据的排名使用
排名的分类
RANK()
DENSE_RANK()
ROW_NUMBER()
用 ROW_NUMBER()分析函数实现的分页查询相对三层嵌套子查询更简单一些
7 集合运算
集合运算就是将两个或者多个结果集组合成为一个结果集。
集合运算包括:
UNION ALL(并集),返回各个查询的所有记录,包括重复记录。
UNION(并集),返回各个查询的所有记录,不包括重复记录。
INTERSECT(交集),返回两个查询共有的记录。
MINUS(差集),返回第一个查询检索出的记录减去第二个查询检索出的记录
之后剩余的记录。
oracle分页
- 直接用rownum
- minus差集(不推荐,效率低)
- 使用row_number() over(…)函数
8 数据备份
整库导出(备份)/导入
命令: exp hsj520/123123 [file=’文件名’] full=y
手动在 oracle 的安装目录下创建文件夹 backup
在该目录下打开 cmd,进行全库导出
完成之后,在 backup 文件夹中出现以下文件:EXPDAT.DMP。
导出的时候,如果不指定文件名,默认是 EXPDAT.MDP,我们在导出的时候可以
指定文件名。
整库导入
命令:imp hsj520/123123 [file=’文件名’] full=y
如果不指定文件名。则按照默认的 EXPDAT.MDP 进行整库导入。
按用户导入/导出
按用户导出:exp hsj520/123123 owner=hsj520 file=‘hsjspace.DMP’
按用户导入:imp hsj520/123123 file=‘hsjspace.DMP’ fromuser=hsj520
按表导入/导出
按表导出,需要表所在的用户进行登录。要导出多张表可以用逗号隔开。
exp hsj520/123123 file=‘mytable.DMP’ tables=t_owners,t_ownertype
按表导入,可以只导入部分表。
imp hsj520/123123 file=‘mytable.DMP’ tables=t_owners
java备份数据库