- Oracle和plsql的安装。
- 查询
解析步骤: from -> where -> select -> order by
SELECT [DISTINCT] {*,column alias,..}
FROM table alias
WHERE 条件表达式
ORDER BY 排序字段列表 [asc|desc]
条件查询
模糊查询
排序
子查询:嵌套查询
- 函数
单行函数:日期,nvl(null值处理),decode(多值判断)
多行函数:count,max,sum,avg
- 分组
解析步骤1)、from 2)、where 3)、group 4)、having 5)、select 6)、order by
select distinct * | 字段 | 表达式 | 函数 as 别名
from 表 表别名
where 过滤行记录条件
group by 分组字段列表
having 过滤组
order by 字段列表 asc | desc
- 行转列
select name,
min(decode(course, '语文', score)) 语文,
min(decode(course, '数学', score)) 数学,
min(decode(course, '英语', score)) 英语
from tb_student
group by name;
- DDL
creat创建
drop删除
after修改
- 三范式
- 设计表
- 确定表名
- 字段名 类型 约束(主键,外键,默认,唯一,非空,检查)
主键:(唯一且非空) primary key
外键:其他表参考自己的某字段
默认:当没给值时,给一个默认值 default(18)
非空:不能为空 not null,
唯一:唯一 unique
检查:自定义的规则 check(age>=18)
- 创建表
给表名添加注释 comment on table tb_user is '用户表';
给表字段添加注释 comment on column tb_user.age is '年龄';
给约束添加名字 constraint nn_user_pwd 约束
追加默认 alter table tb_user modify (age default(18));
追加非空 alter table tb_user modify (userpwd constraint nn_user_pwd not null);
追加自定义约束 alter table tb_user add constraint ck_user_pwd check(length(userpwd) between 4and 18);
- 删除表
直接删除表 drop table emp_his;
先删除从表,再删除主表,同时删除约束
drop table tb_txt cascade constraints;
drop table tb_user cascade constraints;
删除主表的同时级联删除约束(要求从表外键设置null元素)
drop table emp_his cascade constraints;
- 修改表结构
- 关于约束
约束的禁止和启用
ALTER TABLE tb_user disable constraint nn_user_name;
ALTER TABLE tb_user enable constraint nn_user_name;
- 视图
建立在表或者结果集上的虚拟表。
不是所有的用户都能创建视图,要授权。
授权: grant dba to scott;
回收: revoke dba from scott;
创建:create or replace view vw_xixi_haha as select empno,ename,sal,deptno from emp with read only;
- 索引
提高查询效率
创建索引 create index idx_emp on emp(sal,ename);
删除索引 drop index idx_emp;
- 序列
程序管理流水号。序列在创建时,没有与表关联,在操作数据时与表关联。
创建:create sequence seq_tb_user start with 2 increment by 2;
查询下个值 select seq_tb_user.nextval from dual;
查询当前值 select seq_tb_user.currval from dual
删除序列 drop sequence seq_tb_user;
10.事物
单个逻辑单元内操作的一组相关操作。要么全部完成,要么全部没有完成。
保证事物的安全性。ACID
A原子性:事物中所有数据的执行,要么全部执行,要么全部不执行。
C一致性:事物完成时,所有数据保持一致的状态。
I隔离性:事物在另一个事物修改前或修改后访问。
D持久性:事物对数据库的修改是持久的,不丢失数据。
事物的隔离级别
丢失更新:AB同时存储数据,结果没有是预想的A+B的数据。
脏读:A修改了数据没有提交,B读取了修改后的数据,A回滚,B读取的无效。
不可重复读:A读了一串数据,B刚对A读的数据修改,A再读发现跟刚才不一样。
幻读:A读取数据带WHERE条件查询,B插入数据也是A的WHERE条件,T1再次查询,发现出现了B的记录。
事物的开启:自动开启于 DML 之 insert delete update
事物的结束:
成功:正常执行完成的 DDL 语句:create、alter、drop
正常执行完 DCL 语句 GRANT、REVOKE
正常退出的 SQLPlus 或者 SQL Developer 等客户端
如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)
手动提交 :使用 commit
失败:rollback ,手动回滚(只能对未提交的数据回滚)
非法退出 意外的断电
11.DML
Insert添加数据
insert into 表名 values(和表结构顺序和个数和类型一致的数据
insert into 表名(指定列名) values(和指定的列个数、顺序、类型一致的列数据)
Delete删除数据
delete [from] 表名 where 过滤行记录
Update修改数据
update 表名set (字段列表) =(select 字段列表 from 源表 where 过滤源表记录)where 更新记录的条件手动更改字段值:
truncate: 截断所有的数据
truncate和delete的区别:
1、truncate -->ddl ,不涉及事务,就不能回滚
delete -->dml ,涉及事务,可以回滚
2、truncate 截断所有的数据 delete 可以删除全部 或者部分记录
3、truncate从结构上检查是否存在主外键,如果存在,不让删除
delete 从记录上检查是否存在主外键,如果存在,按参考外键约束进行删除。
12.表连接
内连接:
笛卡尔积: 交叉连接cross join
等值连接:在笛卡尔积的基础上取条件相等 自然连接natural join
非等值连接:bewteen and,><
自连接:俩个一样的表连接
外连接:
主表在左,左外连接 left join
表和表之间的关系:一对多,多对一,多对多
13.rowid和rownum
Rowid:删除重复记录。
Rownum:必须排序,不能直接取>1。