oracle数据库(零)_特性汇总
1 理论基本
1.1 使用总结
- sql引用内存位置组合数据
- 分页跑p,分批提交,速度更快更稳定
- 避免子查询,不走索引,每个子查询都遍历一次数据,改用链接
- 避免集合的使用
- 避免模糊查询
- 判断有没有时,可以用连接再计算count得出
- 计算逻辑,执行每一步时,根据当前表的数据结构,迭代传入列的数值计算的,所以写语句的时候,思考用到了什么变量表,变量表目前的结构是怎样的。
- 不使用* ,不直观,危险
- 别名可以减轻系统负担
1.2 sql语言类型
DDL(data definition language)
【create,alter,drop,truncate】数据定义语言 对表结构进行操作DML(data manipulation language)
【insert,update,delete】数据操控语言,对数据进行操作DQL
【select,order by,group by】数据查询语言,标准没有,人们加上去的DCL
【gant,revoke】数据库控制TCL
【commit,rillback】事务控制语言
1.3 分层逻辑(BI开发基本流程)
-
ODS
: 一层 (源数据)
作用是从个平台抽取源数据,整合数据源,避免调用的错误发生,保证索源逻辑可实现 -
DW
: 二层 (数据仓,维度表,事实表)
作用主要是建立事实表和维度表,俗称数据仓库
事实表:通过修剪源数据保留需要的事实数据,通常作为主表使用
维度表:根据事实表的维度扩展或细化出来,每个字段都可以作为主表的维度,保持至少一个字段可以与事实表进行连接 -
DM
: 三层(根据业务主题,重组维度,聚合计算,设立目标表)
作用主要针对不同主题设立目标表,形成数据集市
目标表:根据需求,组合维度表并聚合计算事实数据,得出目标表 -
报表
1.4 常用数据类型
字符串位数习惯用8的倍数,数字用(22.2)
长度是字节,utf-8时3字节1个中文,gbk时2字节1个中文
oracle中会自动尝试转化数据类型
CHAR(length)
VARCHAR2(length)
:可变长度字符,默认长度1,最长4000BUMBER(p,s)
:无s是整型,有s是浮点型DATE
:日期类型INTERVAL
:时间间隔类型SYSTIMESTAMP
:时间戳
1.5 特性
- 综合特性
utf-8
:3字节一个中文
gbk
:2字节一个中文
oracle
:计量按从1开始数 - 删除的区别
drop
: DDL语言,速度最快,删除整张表
truncate
: DDL语言,速度其次,直接清空,不能恢复
dalete
: DML语言,速度最慢,每行删,可回滚,通过日志恢复 - null的特性
条件缺少数据时为null,不能再primarykey和notnul列使用,
排序时最大
参与任何计算时返回null
参与任何条件判断是返回false
指定聚合函数忽略null
count(col)忽略null
count(*)计算null
IS NULL
是null条件
IS NOT NULL
非条件
IN (NULL)
在逻辑运算里会先别过滤掉
ORDER BY col DESC NULLS LAST
控制null的排序职位 - 查询语句的执行顺序(写需求的顺序)
根据顺序逐行判断,匹配时返回select字段
5select
col1,col2
1from
table
2where
condition【右-左】
3group by
col1,col2【传入常数时,与聚合函数一样,先赋值一列数据】
4having
condition
6order
col1 ASC,col2 DESC【左-右,可以传入列的数字】 - 迭代语句
from,update,dalete语句后面跟的表会被逐行迭代 - group by特性
必须有聚合函数与其并存
查询的字段是聚合函数或分组字段
可以与case连用
gourp by 1
传入任意值时,会把整个表归为1个组处理 - between特性
两端闭合区间
:x>=10 and x<=20 - 伪列rowid,rownum的使用
rownum
必须能查找到1,否则没有返回内容,查询没有不包含1行时用子查询
rowid`用于去重或返回唯一,按需要唯一的字段分组返回min(rowid) - where 的特性
后面不跟聚合函数
- where 和 on 的区别
(都会尽量过滤能过滤的条件)
on
用于连接,保留主表全部数据
where
用于过滤,可能吧主表的数据过滤掉
同在一条语句时 on 先执行
2 常见问题
2.1 plsql乱码问题
- 找到数据库语言编码
select userenv('language') from dual;
select * from V$NLS_PARAMETERS; -- 连接1,2,9行
select r1||'_'||r2||'_'||r9
from
(
select
min((case rownum when 1 then value end)) r1,
min((case rownum when 2 then value end)) r2,
min((case rownum when 9 then value end)) r9
from V$NLS_PARAMETERS
group by 1
);
- 设置环境变量
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK - 重启
2.2 plsql过期
- 删除注册表文件夹(regedit)
HKEY_CURRENT_USER\Software\Allround Automations
HKEY_CURRENT_USER\Software\Microsoft\Security
2.3 oracle sql developer的结果输出
set serveroutput on;
2.4 显示行号
ps/sql developer
:tools->preferences->editor->display line numbers
sqlwindow->show gutteroracle sql developer
:工具,首选项,代码编辑器,行装订线,显示行号
查询六大法则
- 分组having法
- 分析函数法
- 重复链接发
- case判断法
- 字符合并法
- 条件子查询