前言
总结整理不易,希望大家点赞收藏。
给大家整理了一下数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。
数据库系统概论系列文章传送门:
第一章 绪论
第二/三章 关系数据库和标准语言SQL
第四/五章 数据库安全性和完整性
第六/七章 关系数据理论和数据库设计
第八/九章 数据库编程和优化
第十章 数据库恢复技术
第十一章 并发控制
数据库系统概论-练手题集合
文章目录
第二、三章 关系数据库和标准语言SQL
2.1 关系
关系代数:传统集合运算:并、差、交、笛卡尔积;
专门关系运算:选择σ(行),投影π(列),连接,除;
等值连接:相同属性不会合并,成为两列。
自然连接:相同属性合并(剔除相同)。
悬浮元组:因为合并而被丢弃的元组。(没有对应的可合并的元组)
外连接:悬浮元组全保留,没有的属性写NULL;
左外连接:保留左关系中的悬浮元组;
右外连接:保留右关系中的悬浮元组
2.2 SQL语言的特点
(1) 语句简单,逻辑清晰,综合统一
(2)高度非过程化
(3)面向集合
(4)同一种语法结构提供多种使用方式。
2.3 SQL语句总结(别看代码了,这个再看就过一遍注意点)
(1) 模式创建和定义:
create schema “s-t”(模式名) authorization user1(用户名);
可以在该语句后直接创建表/视图/授权。
(2) 删除模式:
drop schema “s-t” cascade/restrict [cascade]
cascade级联,删除该模式的同时删除模式下所有数据库对象。
Restrict限制,删除时如果该模式下还有其他数据库对象则拒绝删除]
(3) 基本表定义:
Create table student(
Sno char(9) primary key, //属性名 数据类型 列级约束;
Sname char(20) unique,
Age smallint,
Sdept char(29) //系名
Foreign key (sdept) references dept(dname) //我乱写的,表级完整性约束。
主键由多个属性构成,必须用表级完整性约束。Primary key(sno,cno)这样。
(4) 显示当前搜索路径:
show serach_path(用户,模式)
管理员设置路径:
set serach_path to +用户名,模式名
(5) 修改基本表:
//属于修改表中的列相关。
Alter table student add s_birth DATE; //增列
Alter table student alter column(这个column可写可不写) age int;//修改列类型
Alter table student drop column s_birth; //删列
Alter table student drop constraint primary key(sno);//删完整性约束
(6) 删除基本表
(突然发现删除时都有cascade/restrict规定)
Drop table student cascade;
(7) 索引:
用于加快查询速度。
顺序文件索引,B+索引,散列(hash)索引,位图索引。
索引由系统自动选择,用户不能选,属于内模式。
索引的SQL语言:
create unique index(关键字是index) stusno on student(sno); //对student表的sno建立升序唯一索引stusno
Alter index stusno rename to snoindex; //对索引改名
Drop index stusno; //删除,没有cascade和restrict。根本没有和其他的索引之类有联系就不考虑级联。
(8) 数据查询:
Select (all / distinct 后者在查询时合并相同结果)列名……From 表名/视图Where 条件Group by 列名 having 条件(常+聚集函数)Order by 列名 asc/desc (排序)
注意事项:
where 和 having 的区别:
1、执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
2、判断条件不同:where不能对聚合函数进行判断,而having可以。
执行顺序:FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
(9) 连接查询:
等值连接:
Select student.,sc. From student,sc Where student.sno=sc.sno;
自然连接则会合并相同列,这时候查询语句就会变成
Select student.sno,sname,sage,cno From student,sc Where student.sno=sc.sno;
注意事项:
1、自然连接一定是等值连接,但等值连接不一定是自然连接。
2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
外连接
Select student.sno,sname,sage,cno From student left outer join sc on(student.sno=sc.sno)
(10) 嵌套查询:
不相关子查询:子查询条件不依赖父查询
相关子查询:子查询查询条件依赖父查询
区别:不相关子查询一次查询,相关子查询循环求解。联合查询时UNION ALL 会有重复结果,UNION 不会。
联合查询比使用or效率高,不会使索引失效
(11) 数据更新:
插入数据,修改数据,删除记录(这都是对行的操作,区别alter table语句)
插入
Insert Into student(sno,sname,sex,age) Values(‘20000’,’张三’,‘男‘,18);
更新
Update student Set age=22 Where sno=’20000’;
删除
Delete From student Where sno=’20000’;
(12) 空值:
判断用 is null 或者 is not null
(13) 视图:
视图是一张虚表。只存放视图的定义,不存放其真正的结构。对视图的操作也会转化成对基本表的操作。
创建
Create view is_student As select sno,sname From stuent Where sdept=’is’With check potion //用来保证对视图更新的时候,满足子查询条件
注意事项;
with cascaded check option 级联检查,不管上面开没开检查选项都会检查。
with local check option 本地检查,先在本地检查,再向上检查,上面没开检查选项就不检查。
删除
Drop view is_student cascade;
视图消解:对视图进行查询操作的时候,首先进行有效性检查,检查相关定义是否存在,如果存在就在数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成对基本表的查询,再执行修正了的查询。
视图和派生表是有区别的。视图永久性,派生表临时。
13.1 视图的作用
(1) 视图能够简化用户的操作
(2) 使用户能以多种角度看待同一数据
(3)视图可以帮助用户屏蔽真实表结构变化带来的影响保证了数据的独立。
(4) 通过视图用户只能查询和修改他们所能看到的数据,保证了数据的安全。