DB笔记(Oracle)

DB笔记(Oracle)

一.Oracle的安装,服务的启动,数据库的建立,用户的建立(略过)。

二.Select语句:

(一)、单行函数:

1.      表达式和null计算,结果为null,即,不作显示(也就是数据失踪了!)。所以一般用函数NVL(列名,替换值),如NVL(sal,0)。

2.      字符串拼接:||    例如:select  ID||’---’||uname  from emp;

3.      排序 和过滤(order by 和 where):

a)        select* from emp order by sal asc,comm desc; 此表达式为按薪水升序排,薪水相同的按奖金倒序排。

b)        select* from emp order by ( sal + NVL(comm,0) ) desc;此表达式是:按照薪水和奖金之和来排序,注意:如果不用NVL直接用comm,则会丢失一些值

c)        select* from emp where uname > ‘CBA’;  字符串的过滤, 这个具体还没搞懂

d)        select* from emp where sal between 100 and 200;

4.      条件选择:and,or,in(a1,a2,a3)。注意:其中in(a1,a2,a3)表示选择a1,a2,a3三个中的一个,而不是选择三个范围中的一个。

5.      Not关键字:not in(a,b,c); is not null; 等等。

6.      Like关键字:通配符有两个,如下

a)        %: 任意字符 出现 任意次数。

b)        _: 任意字符 出现 一次。

注意:查询通配符需要转义,如下:select * from emp where ename like‘%\%%’ escape ‘\’; select * from emp where ename like ‘[email protected]_%’ escape ‘@’;

7.      事件处理函数: upper(), Lower(), substr(ename,1,4), length(), trim(), ltrim(), rtrim()。

8.      时间格式函数:to_char(sysdate,’yyyy-mm-dd’);  to_date(string,’yyyy-mm-dd’)。

两个日期间的天数 select floor( sysdate  – to_date(‘2014/12/27’ , ‘yyyy/mm/dd’) );

9.      rownum: 行号,表的原本数据排序,只能用于<或<=运算符,不能用>或>=运算符,如果要取后几行数据,需要一个where子查询先倒叙排列。

10.  正则表达式:sql语句支持正则表达式,例子如下:

select* from emp where regexp_like(列名,’正则表达式’);

(二)、组函数:

1. avg() ,min(), max(), sum() 略过不讲。

2.count():计数函数。返回查询结果的行数,经常配合distinct,去除重复行。

例如: select count(eno) from emp whereeno>200; 或者 select count(distinct eno) from emp;

3. group by : 分组函数。

a). 查询单位不再以行为单位,所有操作均以组为单位.

b). 何为一组?值相同则为一组.

c). having为过滤分组,

c). group by子句 须在where子句之后,order by子句之前。

d). select eno from emp group byeno;   ----eno相同的分为一组,查询每组的eno

select depno,sal(sal) from dept group by depno;    ----以部门号分组,查询。

select max( avg(sal) ) from dept group by deptno;  ----先按部门编号分组,查出每组平均值的最大值。

select * from dept group by sal,comm;  ----工资和奖金相同的分为一组,查询*。

三.Insert,update,delete语句(略过)。

四.其他操作:

1.      索引index:可以给某个列增加index,提高其select的效率。创建方法超级简单:create index index_name on tablename(cols); 然后不用管,我们索引时oracle会自动调用index来检索。删除方法也超简单:drop index index_name;  注意: index缺点也不少,Index不适合:数据唯一性不好的列+增删改频繁的列。所以不到必要,不用建立

2.      视图view:使用方法和表的一模一样,好处:sql重用+安全

create view v$_vname as (select子句); drop view V$_vname;

3.      序列sequence:用法:创建,删除,引用。略过。

五.DB设计范式:   (重要)

1.      DB范式目前有六种,1NF,2NF,3NF,BCNF,4NF,5NF(完美范式)。依次越优化。

2.      企业级开发,最低满足3NF。

3.      满足范式越高,DB冗余越低,DB越优化。

4.      详解:

a)        1NF:表的每个列都是原子的。

错误示范 -->

b)        2NF:实体属性完全依赖主关键字。即不能只依赖主键的一部分。

错误示范 à (略过)

常见错误 à 联合主键的表。 某些属性依赖主键的一部分。

解决方案 à 拆分主键拆分表,外键关联。

c)        3NF:

错误示范 -->

常见错误 à 表中属性A依赖于B,B依赖于C。数据量大时会大量冗余。

解决方案 à 拆表,外键关联。

d)        BCNF:允许出现有主键的一部分被主键另一部分或者其他部分决定。即联合主键相互依赖。

错误示范 à仓库表storehouse(仓库ID,管理员ID,物品ID,数量),一个仓库一个管理员,一个仓库多个物品,则依赖关系如下:

出现了仓库ID和管理员ID相互依赖,符合3NF但不符合BCNF。

解决方案 -->拆分。

5.      表的关联关系 和解决方案:

a)        一对一:可外键放到任意一张表中。

b)        一对多:外键放在多方。例如:班级表(一)--学生表(多),学生表加一个外键。

c)        多对一:一对多反过来,(略过)。

d)        多对多:拆分出一个中间表来关联,把多对多编程两个一对多,这种结构也叫:实体表—映射表关联结构。

e)        注意:映射表中两个外键需形成联合主键。

备注:

1. 别名可以用中文,但要加双引号;

2. oracle的某些客户端,如PLsql等,有sql window和command window窗口,用来跑不同的语句,例如desc User; 指令只能在command window中跑;

3. SQL语句优化:Select * from emp;   *是通配符,性能较低,程序中尽量不要出现*,最好能具体到列名。

4. SQL不区分大小写,但是script执行的时候会统一转化为大写。 所以:大写执行效率高但不利于阅读,小写脚本执行效率高但不利于阅读,所以一般关键字大写,另外需要注意:建议程序里关键字也大写,有利于增加效率

5. SQL语句的优化:      检索结果少and 检索结果多, 检索结果多 and 检索结果少。因为sql语句是顺序执行。

6. SQL语句优化:select * from emp where eno=100 or eno=200 oreno=300; 此语句和select * from emp where eno in (100,200,300); 等价,但是用in的语法清晰+效率高,因为in函数内部做了优化。

7.SQL语句优化:用like关键字和通配符来检索数据万不得已再用,它的操作慢的不得了。

8. 组函数的嵌套最多两层,例如 max( avg(sal) )等,不能出现max( min( avg(sal) ) ).

9. Oracle内部执行顺序:where行级过滤 à group by分组 à having组级过滤 à order by排序。所以:group by子句 须在where子句之后,order by子句之前,即where…group by…order by…

10. Transaction事务机制要点:只操作insert,update,delete行级语句。如果系统正常关闭,则事务自动commit;如果执行create,drop等表级操作,事务自动commit;如果非正常关闭如断电等,事务自动rollback。

时间: 2024-11-09 00:12:57

DB笔记(Oracle)的相关文章

学习笔记:Oracle 12C 数据非常规恢复工具bbed的使用说明

ORACLE 12C 依然支持 bbed,ORACLE 12C的测试版出来了,对于习惯了使用bbed(ORACLE 手术刀)的人来说,12C是否继续被支持是一个很让人关注的问题,通过本实验测试,12C继续支持bbed,很多艰难的数据库恢复依然可以通过bbed来实现,也从侧面说明,ORACLE 12C在块的结构上还依然和以往版本相似 数据库信息 [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.0.2 Beta

学习笔记:Oracle dul数据挖掘 使用DUL数据恢复软件恢复分区表中

使用Oracle dul数据恢复工具对Oracle数据库分区表中的数据进行恢复 创建SALES分区表案例 CREATE TABLE SALES ( PRODUCT_ID VARCHAR2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) SUBPARTITION TEMPLATE ( SUBPA

学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中

试验模拟导出Oracle 11G数据库中数据文件坏块中表中的数据 以前一直以为dul对应的版本只能恢复最高的数据库版本一致,今天测试发现dul 10可以恢复11g最新版的数据库.模拟环境 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition

读书笔记oracle之逻辑体系结构

一.oracle逻辑体系结构图 二.逻辑结构组成 oralce的逻辑结构包括 1.表空间 2.段 3.区 4.块 oracle数据库由若干个表空间组成,表空间由若干个段组成,段由若干个区组成,区由若干个块组成. 表空间又分为系统表空间.回滚段表空间,临时表空间和用户表空间. 我们所创建的表与逻辑结构中的段相对应,T表就是T段,但一个表不是只对应一个段(如果表中有lob字段,则lob字段至少对应2个段,一个数据段一个索引段,或者表是分区表,则每个分区对应一个段) 区的设计是为了避免过度扩展,因为块

[Oracle] - Create DB on Oracle 12c for an Application

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Let's say we are going to develop a application for a bank, or any other enterprise, this application need a DB. And we decide to choose Oracle

[terry笔记]Oracle SQL 优化之sql tuning advisor (STA)

前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综复杂的表关联,却让DBA们满头大汗. 如下特别介绍一种oracle官方提供的科学优化方法STA,经过实践,不敢说此特性绝对有效,但是可以开阔思路,并且从中学到许多知识,不再用“猜”的方式去创建索引了. SQL优化器SQL Tuning Advisor (STA),是oracle的sql优化补助工具.

[读书笔记]ORACLE数据库文件管理

数据库文件包括数据文件.日志文件.控制文件和密码文件.参数文件等,对于这些文件的管理可以看作是增删改查的过程. 1.数据文件管理 增: 新增表空间时增加数据文件 create tablespace test_2016 datafile '/u01/app/oracle/oradata/orcl/test_01.dbf' size 10M autoextend on next 10M maxsize 100M; 表空间增加数据文件 alter tablespace test_2016 add da

Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介

oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance)由共享内存(SGA)和后台进程系统组成,数据库(database)是存储在磁盘上的一系列物理文件. SGA主要由Share Pool(共享池,又分Library Cache和Data Dictionary Cache,前者临时存储最近执行过的语句代码等,后者临时存储数据位置.表定义及用户权限等).

&lt;&lt;卸甲笔记&gt;&gt;-Oracle线下迁移到PPAS

迁移原则 1.尽量保持Oracle与PPAS一致,这会使得日后应用程序迁移更为简单 2.迁移前检查PPAS中是否有同名帐号及同名的Schema a)如果有,建议考虑删除或改名 b)如果没有,先手工建立与Oracle同名的帐号及Schema 3.用MTK迁移时,配置文件中目标数据库建议使用与Oracle同名的帐号(如本案例中使用scott),这样可以保持目标数据库中所有表和对象的主属用户都和Oracle中一致 一 环境准备 Oracle环境 a)       IP:192.168.1.113,管理