##### Oracle物理存储结构
```
1.数据文件:包含真实数据,一个数据文件只能属于一个表空间
2.控制文件:每个oracle数据库都有一个包含元数据的控制文件
联机重做日志文件:
```
##### Oracle逻辑存储结构
```
数据块:映射到磁盘块
范围(区):是数据块的集合
段:是区的集合,存在于表空间
表空间:由多个数据文件组成
```
##### oracle做项目遇到的
```
rownum:
row_number() over
rank()..over
dense_rank() over
```
##### 基本select语句
```
算术运算符:
乘除优先级高于加减
优先级相同,从左到右
括号改变优先级
空值:包含空值的数学表达式的值都为空值
连接符: "||"" ,将列与列,列与字符连接在一起,合成一列
distinct 去重关键字
操作符:
BETWEEN .. AND .. 两个值之间,包含边界
IN(SET) 等于值列表中的一个
LIKE 模糊查询的 % 与 _ 符号
IS NULL
优先级:
1.算术运算符
2.连接符
3.比较符
4. IS NULL LIKE IN
5.BETWEEN
6.NOT
7.AND
8.OR
括号可以改变优先级
```
### 单行函数
```
操作数据对象
接受参数返回一个结果
只对一行进行变换
每行返回一个结果
可以转换数据类型
可以嵌套
参数可以是一列或一个值
```
##### 字符函数
```
大小写控制函数:
LOWER:将字符串转成小写
UPPER:转为大写
INITCAP:每个单词首字母转为大写
字符控制函数:
CONCAT:将两个字符串连接到一起
SUBSTR:截取字符串
LENGTH/LENGTHHB:获取字符串长度
INSTR:字符串出现的位置
LPAD|RPAD:左填充,右填充
TRIM:去掉某个字符串
REPLACE:替换某个字符串
```
##### 数组函数
```
round:四舍五入
trunc:截断(保留几位小数) 例:trunc(45.926,2) 45.92
MOD:求余
```
##### 日期函数
```
MONTHS_BETWEEN:两个日期相差的月数
ADD_MONTHS:向指定日期加上若干月数
NEXT_DAY:指定日期的下一个日期
LAST_DAY:本月的最后一天
ROUND:日期四舍五入
TRUNC:日期截断
```
##### 转换函数
```
数据类型转换:隐式,显式
隐式:oracle自动转换数据类型 例如:number转为varchar等
显式:
to_number:
to_date(date,'format_model'):format_model为日期格式
to_char:
```
##### 通用函数
```
nvl(expr1,expr2):expr1为null,返回expr2
nvl2(expr1,expr2,expr3):expr1为null,返回expr3,不为null,返回expr2
nullif(expr1,expr2):不等返回第一个值,相等返回null
coalesce(expr1,...,exprn):遇到非null值返回该值,停止
```
##### 条件表达式
```
case: 类似java--if else
decode:类似case的表达式
```
### 多行函数
```
多行函数参与计算时会忽略null值
count:求个数 例:count(distinct name),求不同姓名的个数
sum:求和
max:
min:
avg:
求不同部门的平均薪水:
select deptno,avg(sal) from emp group by deptno;
where 与having的区别:
where 后面不能使用多行函数
having是先分组再过滤
where是先过滤再分组
group by增强 使用rollup(),cube();
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
rollup():生成简单的group by聚合行以及小计行或超聚合行,还生成一个总计行
cube():生成简单的group by 聚合行,rollup超聚合行和交叉表格行
```