99 语法:
- select 数据(*|字段,字段|伪列) from 数据源(表|结果集|视图) where 行过滤条件 group by 分组字段 having 组过滤条件 order by 排序字段;
- select 数据(*|字段,字段|伪列) from 数据源1,数据源2.. where 行过滤条件 and 表连接条件 group by 分组字段 having 组过滤条件 order by 排序字段;
- 等值连接:
- 自然连接 natural join 自动根据同名字段,主外键关联关系 字段做等值连接
- 注意: 在自然连接中同名字段不能指明出处
- 非等值连接:
- 数据源1 join 数据源2 on 表连接条件 可以做等值,可以做非等值
- 内连接 : 满足连接条件才能显示 (inner) join
- 外连接 : 有的表中的数据不满足连接条件也显示
- 主表: 不满足连接条件也显示
- 左连接 : left join
- 右连接 : right join
- 全连接 : full join 两张表都作为主表
- rowid 与 rownum:(都做伪列存在)
- rowid : 行记录的地址,行的唯一标识,数据插入到表中的是决定
- 可以实现去重: 对没有主键|唯一字段的表中多条完全重复的数据,根据rowid实现去重
- 去重: 如果表中存在主键或者唯一字段,直接 根据主键或者唯一字段去重
- rownum 结果集的序号,规律: 从1开始,每次+1,一个select查询语句就有一个结果集,每一个结果集中数据都有自己的序号-->rownum
- 注意: 当需要使用rownum进行一些判定,需要对一个已经确定的结果集的rownum进行判定
- rownum与排序:
- 一般规律为: 根据非主键字段排序,先确定rownum再排序,根据主键字段排序,先排序,后确定rownum
- rowid : 行记录的地址,行的唯一标识,数据插入到表中的是决定
- 视图与索引
- 视图 : 表与结果集之间
- 逻辑视图: 不会存储数据,数据来资源原始表结构,起到封装,简化,提高复用性的作用
- 物理视图: 真实存储数据
- 作用: sql语句的封装与简化,提高复用性,安全性
- create or replace view 视图名 as select语句 [with read only];
- 修改视图中的数据其实是修改原有表机构中的数据,视图不存储数据
- 删除视图:drop view vw_haha;
- 索引
- 帮助提高查询效率,索引为表中的字段添加索引,大量数据的前提下,通过索引对某个字段的数据做查询,效率会大大提高,索引也是对象,需要通过是数据库维护,索引类似与目录
如果大量做根据字段做查询,少量做增删适合使用索引,如果大量根据字段做增删,少量查询,每次增删数据需要根据维护索引,会降低效率,oracle自动为主键添加索引。
-
- 为emp表的sal字段添加索引:
- create index 索引名 on表名 (字段列表...)
- drop index 索引名
- 注意: 唯一性较好字段适合建立索引
- 为emp表的sal字段添加索引:
- 表设计
- 三范式:
- 列不可再分,字段的原子性
- 定义主键(唯一+非空),确定唯一
- 拆分表,通过主外键约束定义两张表的关系 ,消除传递依赖,避免数据的过渡冗余
- 创建表
- 表名
- 确定表中的字段
- 字段: 字段名 数据类型 字段的约束(要求)
- 数据
- create 表名(
- 三范式:
字段名 字段类型,
字段名 字段类型,
.....
字段名 字段类型
)
-
- 表与表之间的关系
- 一对一 : 用户 身份证 -->主外键
- 一对多|多对一 : 学生 与 班级 -->主外键
- 多对多 : 订单与商品 学生与课程 --> 中间表
- 表与表之间的关系
- DML 数据管理语言
- 数据的增insert 删delete 改update
- 数据的查询 DQL
- 在对表中数据做增删改自动开启事务,需要提交或者回滚
- 序列工具
- 帮助管理类似主键字段的值
- 序列与表与字段不绑定
- 序列第一次需要获取nextval
- 创建 create sequence 序列名 start with 起始值 increment by 步进;
- 修改 update 表名 set 字段=值 [,....] where 过滤行记录;