以Oracle数据库为目标的数据库进阶(三、四)
分组函数:(会自动忽略空值NULL)(查询语句包含分组函数后,查询字段只能是分组函数或者分组字段)
count(); 计数,count(*)
max(); 最大值
min(); 最小值
sum(); 和
avg(); 平均值
group by 按什么分组
having 包含分组函数的条件(where和having都可以做条件,区别是having专为分组函数使用)
最全select语句:
select ..
from ..
where ..
group by..
having ..
order by..
------------------------------------------------------------------------------------------------------------------------------------------
子查询:一次执行多条查询。一个查询使用另外一个查询做条件。select...(select...)
分组函数只能嵌套2次。
子查询返回多条数据时,需另外处理。
in,not in
any:任意一个
all:所有
------------------------------------------------------------------------------------------------------------------------------------------
DDL语句
删表:
drop table tablename;
建表:
create table tableName(
字段名 类型 默认值 字段约束,
...,
表约束
);
类型:number()\char()\varchar2()\date
------------------------------------------------------------------------------------------------------------------------------------------
DML语句
新增数据:
insert into 表名(字段名,...) values(字段值,...);
缺省则全部输入
修改数据:
update 表明 set 字段=新值,... where 条件;
删除数据:
delete from 表名 where 条件;
------------------------------------------------------------------------------------------------------------------------------------------
事务处理:
commit:提交之后才生效。
rollback:回滚。
如果不进行事务处理,数据库中数据不会改变,新数据只在当前窗口可被看到,会锁定本次操作涉及到的数据,没涉及到的数据不被影响。
commit之后新书据写入数据库,旧数据不再存在。解除锁定数据,所有窗口看到数据一致为新数据。
rollback后新数据不再存在,锁定解除。
在一些情况下会自动提交(DDL、DCL、正常退出sqlplus)或者自动回滚(非正常退出)
------------------------------------------------------------------------------------------------------------------------------------------
约束constraint:
5种
(非空、
唯一,不限制空值因为空值之间不相等、
主键约束=非空+唯一、
外键约束 1对多、
check约束)
not null;写在字段后。(字段名 类型 not null; 字段名 类型 constraint 约束名 not null)
unique;会加索引,增加查询速度。(同上)
primary key;(同上,)
部门表提供主键,员工表加外键字段。
表级约束写法,在创建员工表时写:constraint 约束名 foreign key (员工表关联外键字段) references 部门表(主键字段);
员工表的外键字段必须来自部门表或者NULL,删除时也需要注意(先清除子表相关数据再删除父表;级联删除,父子表一起删除,on delete cascade;置空关联字段on delete set null)on delete都在建表时使用。
SQL语句单行注释 --
check (表达式)在创建表时使用。
DB支持子查询建表。(create table ..as..)
------------------------------------------------------------------------------------------------------------------------------------------
view 视图:保存查询结果。下次使用时直接查找试视图。视图本身没有数据,具体数据依然存在表中,不推荐通过修改视图修改表中数据。
create or replease view viewname as 子查询 with read only;
index索引:提升查询效率,降低增、删效率。
create index indexname on 表名(字段名);
sequence序列:ORACLE主键的一种对象。
create sequence sname increment by 自增n start with 从几开始,drop sequence sname;
序列提供主键值:取自增后的值 nextval,当前值currval;
使用时:
create sequence sname;
insert into tname values(sname.nextval,'guanyu',1600);
------------------------------------------------------------------------------------------------------------------------------------------
top n:oracle使用rownum实现,但是他只认得小于号:select * from (子查询) where rownum<11;
分页处理,3层嵌套:select * from (select rownum row_id,.. from (select ..from tname order by .. desc)) where row_id范围;
------------------------------------------------------------------------------------------------------------------------------------------
DB设计,范式3:对于单表
1、无重复字段;
2、非主属依赖主属;
3、不能有字段依赖非主属;
多表:
1V1;合并;共同主键;
1VN;主外键关联;
NVN;建立关联表,存放2个表的主键;
没关系;