以下内容是看蔡明老师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 就像高级语言编程,其中的语法用到再查即可。 要在实践中历练