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负责的。

 

posted @ 2021-07-04 09:41  悦耳的旋律  阅读(90)  评论(0)    收藏  举报