Oracle数据库学习
# 函数
## 字符函数
1.**UPPER(字符串/列)**:将输入的字符串变为大写返回
2.**LOWER(字符串/列)**:将输入的字符串变为小写返回
3.**INTCAP(字符串/列)**:开头首字母大写返回
4.**LENGTH(字符串/列)**:求出字符串的长度
5.**REPLACE(字符串/列)**:进行替换
6.**SUBSTR(字符串/列,开始点,结束点)**:字符串截取
SUBSTR(字符串/列,开始点):从开始截到结尾
SUBSTR(字符串/列,开始点,结束点):从开始到结束
## 数字函数
1.**ROUND(数字/列,保留小数位数)**:四舍五入操作
2.**TRUNC(数字/列,保留小数位数)**:舍弃指定位置内容
3.**MOD(数字1,数字2)**:取余数
## 日期函数
1.**日期+数字=日期**:表示在若干天之后的日期
2.**日期-数字=日期**:表示若干天前的日期
3.**日期-日期=数字**:表示两个日期相隔的天数,一定是大日期-小日期
4.**LAST_DAY(日期)**:求出指定日期的最后一天
5.**NEXT_DAY(日期,星期X)**:求出下一个指定星期X的日期
6.**ADD_MONTHS(日期,数字)**:求出若干月之后的日期
7.**MONTHS_BETWEEN(日期1,日期2)**:求出两个日期之间所经历的月份
## 转换函数(核心)
**完成前三种函数的互相转换**
1.**TO_CHAR(字符串/列,格式字符串)**:将日期或者数字变为字符串显示
2.**TO_DATE(字符串,格式字符串)**:将字符串变为DATE数据显示
3.**TO_NUMBER(字符串)**:将字符串变为数字显示
## 通用函数(核心)
1.**NVL(列,0)**:处理null,将null换0
2.**DECODE(数值/列,判断值1,显示值1,判断值2,显示值2...)**:多数值判断,类似if else但是只判断数值
# 多表链接
## 笛卡尔积
多表链接时,没有指明链接条件,导致多张表数据乘积
使用条件指明链接条件后本身也会有笛卡尔积问题,当数据量大的时候会显示很慢甚至不显示,多表链接性能很差,性能差前提是数据量大。
使用 on指定条件可以消除指定字段的笛卡尔积
# 统计函数及分组查询(重点)
## 统计函数
- **COUNT()**:查询表中的数据记录
- **AVG()**:求出平均值
- **SUM()**:求和
- **MAX()**:求出最大值
- **MIN()**:求出最小值
## 分组统计
分组有个不成文的规定:当数据重复的时候分组才有意义,因为一个人也可以分组(没有什么意义),而如果想要分组,需要使用GROUP BY。
- 分组函数可以再没有分组的时候单独使用,可是却不能出现其它的查询字段
例:select count(列名) from 表名
- 如果现在要进行分组的话,则select子句之后,只能出现分组的字段和统计函数,其他的字段不能出现
例:select 分组列名,MAX(列名) from 表名 group by 分组列名
- 分组函数允许嵌套,但是嵌套之后分组函数的查询之中不能再出现任何其它字段
例:select MAX(AVG(列名)) from 表名 group by 分组的列名
## WHERE与HAVING的区别
- **WHERE**:是在执行group by操作之前进行的过滤,表示从全部数据中筛选出部分数据,在where之中不能使用统计函数。
- **HAVING**:是在group by之后的再次过滤,可以在having子句中使用统计函数。
## 事务处理
对于数据的操作,很明显查询必更新更加安全,更新有可能出错,所以导致没有按照既定的要求完成更新
可以看成一个整体的多个数据操作,可以理解为一个完整的业务,如果在这之中摸个数据操作出错了,其他操作都应该不执行,并且回归到原始状态,而这一个操作流程就是事物的操作
所有的事务处理操作都是针对每一个session进行的,在oracle数据库中,把每一个连接到数据库上的用户都称为一个session,每一个session之间彼此独立,不会有任何通讯,而每一个session独享自己的事务控制,而事务控制之中主要使用两个命令:
- **事物的回滚**:ROLLBACK,更新操作回到原点;
- **事物的提交**:COMMIT,真正的发出更新的操作,一旦提交之后无法回滚;
但是这样一来会出现一些问题,例如:摸一个session在更新数据表的时候还没有提交事务,其他session是无法更新的,必须等待之前的session提交后才可以;
这种问题从大的方面讲可以称为死锁,但是在oracle中死锁有很多种类,这些与开发者没有太大的关系,是由DBA负责的。
浙公网安备 33010602011771号