oracle笔记

来源:互联网 发布:caffe linux 安装 编辑:程序博客网 时间:2024/06/05 20:42

以下内容是看蔡明老师ppt的一点记录。

主要分为三部分,sql, pl/sql, dba。  dba略看。一,二表示第1,2部分。(一),(二)表示里面的第几个ppt

一. SQL


(一)  SQL基础-数据查询(1)

1. 对一列设一个新的显示名可以加双引号,也可以不加

2. 字符串是大小写敏感的

3. 字符串和日期被封装在单引号内

4. like 匹配 varchar2, date, char , _表示一个元素, %表示任意个元素

5.  用is null 测试一个字段为空

6. 优先级大小,依次下降为: not, and , or
7. order by 排序 asc 上升,  desc下降  只对一个字段有效,即应该写为a desc, b desc 而不能写成a,b desc。

8. desc 表名 可以显示出表的结构

9. &替换变元,  日期字符串需要加引号, 重用则&&


(二) SQL基础-函数

1. 与c语言的库函数类似,用到再查

2. dual表的所有者是sys,可以被所有用户使用。锻炼表包含一个字段dummy,只有一条记录x,dual表非常有用。当你需要数据库返回一个并不存在于任何表中的常数,伪字段或表达式时,可以使用它。比如,select  sysdate from dual;

3. sysdate 是一个返回当前时间的函数, user返回当前账户。

4. 日期fmt格式指定, decode分支, nvl改变null

5. 组函数 一组记录返回一个结果 avg, count, max, min。count(*)将null计算在内,其余的都不。

order by 中可以使用组函数,group by中不可以。

不能使用where语句约束组,而使用having约束组

6. select 子句中如果有组函数,则不能出现没在group by中出现的字段


(三) SQL基础-数据查询(2) -----多表查询等

1. 一旦表格定义了同义词,原表格名称在该语句中就不能再使用,表格同义词的作用于为一个select 语句

2. 外连接 +, 全连接 a full outer join b on

3. 自然连接使用笛卡尔积, 根据条件消除

4. 子查询加括号,放在比交付右侧,不实用order by

5. 多行子查询,返回超过一行数据,主查询必须使用多行比较符 ANY 随便一个, < ANY 比最大值小, >ANY 比最小值大, =ANY 等价与IN

6. 多字段子查询 null 与null不相等,null不等于任何值, 包括其他null

7. 当空值有可能存在于查询返回值时,不要使用not in, not in 等价于 != ALL

8. 子查询可以用在from语句中

9. 一旦用到子查询,一定要认真考虑子查询返回单行还是多行,有没有null值


(四) SQL基础-修改数据

1. 可以用desc 查看表结构 

2. update 表名 set ___ where ___  如果更新字段包含完整性约束,updae将可能执行失败(比如外键)

3.建表语句实例:

create table tab_monemp (
useid varchar2(20)  not null,
mdate date,
empno number(4),
ename varchar2(10),
oldsal number(7,2),
oldcomm number(7,2),
newsal number(7,2),
newcomm number(7,2)
);

4. 事务


(五) 数据库对象-表格

1. 数据库对象:table, view, sequence, index,synonym

2. DDL(data definition language) 建表, 删表, 删除数据库

    DCL(data control language) 权限分配,空间分配

    DML            增删改查

3. schema 对象集

4. alter table 表名  add / modify/ drop ___

     更改列名使用:alter table 表名 rename column 列名 to 新列名

     更改表名使用: rename 表名 to 新表名

5. drop table 表名  运行后自动提交,包括前面未提交的数据,所以一旦删除无法回退

      truncate 清空数据库

6. 约束条件 在对象表格插入修改,删除等时候起作用

     约束类型: not null, unique, primary key, foreign key, check 

     constraint  ___  约束类型 (列)

     注释,队列进行说明 comment

表: comment on 表名 is ' ___' 

列: comment on 表名.列名 is '___"

     关于 约束,注释的完整例子:

    create table salegrade(
grade number(3) not null unique,
losal number(6) not null,
hisal number(6) not null,
constraint sale_losal_ck check(losal > 0),
constraint sale_hisal_ck check(hisal > 0));


comment on column salegrade.losal is '最低工资';
comment on column salegrade.hisal is '最高工资';
comment on column salegrade.grade is '等级';

7. 追加约束: alter table 表名 add constraint    约束名   约束类型 (列)

8. 查询约束: select * from user_constraints where table_name = 'emp';

9. emp                           dept

     deptno  -----> fk        deptno

      子项                           父项

(六) 数据库对象-视图、序列、索引、同义词

1. 视图是一种逻辑结构,自身不存储任何记录,但可以反映数据源表格的值,并可以进行修改数据

     视图在数据字典中被当作一个select 语句存储

2. 创建视图权限不足

    grant create any view to username

3. select .... where rownum < = 3     列出top 3

4. 序列 , 多用于主键id

5. 索引是一个图表对象,可以显示建表也可以由服务器自动建立,索引加速oracle服务器定位数据,有效地降低I/O访问量,如果不使用索引则有可能要全表扫描,一旦建立,由服务器维护,当表格被删除时,相关索引自动被删除。

6. primary key unique 自动建立索引

(七) 高级SQL语句,重要,做一下该节练习

组操作 minus union

分组统计 rollup,  cube,   grouping by group sets

高级子查询 exists, with

高级dml语句 , 批插入等


二. PL/SQL

(一)   变量和语句 游戏规则

(二)  数据交互和控制

(三)  游标

select返回的一组记录称为活动集

(四)  例外

(五)  存储过程和函数

1. sql脚本编程 edit, save, get   执行脚本使用: @  XXX.sql 或者 start  XXX.sql

2.  参数in, out, in out

3. 将过程的执行权限赋给某个用户

   grant execute on 过程名 to username (with grant option 权限传递)

   用户在执行不是自己的过程时候要带上所有者, 比如 execute sys.process_emps

   在过程里加上 AUTHID CURRENT_USER 则程序基于所有者的权限运行

4. 过程的执行 execute 过程名(参数。。)

5. 过程和函数的区别

  

过程过程过程 

函数

作为PL/SQL语句执行

作为表达式的一部分

在程序头不含RETURN子句

在程序头必须含有RETURN子句

可以返回任意数量的值

必须且只能返回一个值

可以包含RETURN语句(不返回值,只表示退出过程)

必须至少包含一个RETURN语句

(六)  包

(七)  触发器

       语句集,记录集

       :new, :old

      可以使用call 调用过程

数据库结构

作用作用

存储过程

PL/SQL程序块,用于存储重复执行的程序

把相关的过程、函数、变量、游标、常量、例外打包

触发器

由特定数据修改语句隐式触发执行的PL/SQL程序块


(八)  编程技巧 (重要  实践经验, 在数据量较大的一些注意事项)



总结: 一定要熟悉sql语言的各种操作, 针对问题能迅速写出sql

           PL/SQL 就像高级语言编程,其中的语法用到再查即可。 要在实践中历练