数据库复习.docx
- 文档编号:17961022
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:47
- 大小:364.74KB
数据库复习.docx
《数据库复习.docx》由会员分享,可在线阅读,更多相关《数据库复习.docx(47页珍藏版)》请在冰点文库上搜索。
数据库复习
第一章绪论:
基本概念
v数据:
描述信息的可识别符号记录,以文字,数字,声音,图形等形式表现。
v数据库:
长期存储在计算机内、有组织的,可共享的大量数据的集合
v数据库管理系统(DBMS):
位于用户和操作系统之间的一层大型复杂的数据管理软件系统
v数据库系统:
由数据库、数据库管理系统及其开发工具、应用系统、数据库管理员和用户构成
v模式:
数据库中全体数据的逻辑结构和特征的描述,反映的是数据的结构与联系
v外模式:
用户能够看见与使用的局部数据的逻辑结构和特征的描述
v内模式:
数据物理结构和存储方式的描述
第一章绪论:
基本原理
vDBMS的功能
v数据定义:
通过DDL定义数据对象(数据库表、索引、视图等)
v数据组织、存储和管理
v数据操纵:
通过DML实现对数据的查询、插入、修改、删除等
v数据库的运行管理:
安全性、完整性以及并发使用
v数据库的建立和维护
v数据库的发展历史
v人工管理阶段:
用户负责数据管理、数据面向特定程序、数据与程序无独立性
v文件管理阶段:
系统提供数据管理、数据面向应用、数据与程序具有物理独立性但无逻辑独立性
v数据库管理阶段:
系统提供数据管理、数据面向全组织、数据与程序间具有物理和逻辑独立性
v数据库系统的特点
v数据不仅内部结构化、整体也是结构化的,数据间具有联系
v数据的共享性高,冗余度小,易扩充
v数据具有物理和逻辑独立性
v具有统一的数据控制功能:
安全性、完整性、并发控制、恢复控制
v数据库的二级映像
v数据库的二级映像
▪外模式/模式映像:
保证数据的逻辑独立性,当模式改变时,只需要修改外模式/模式映像,外模式可以保持不变,从而依据外模式编写的应用程序不需要修改
▪模式/内模式映像:
保证数据的物理独立性,当数据的存储结构改变(内模式改变),需要模式/内模式,模式不需要改变,从而应用程序不受影响
第二章数据模型:
基本概念
v数据模型:
抽象、表示和处理现实世界中的数据和信息,分为概念结构数据模型和结构数据模型
v概念数据模型:
按用户的观点来对数据和信息建模
v结构数据模型:
从计算机实现的观点对数据建模
v实体:
客观存在且可相互区分的事物
v实体集:
同型实体的集合
v属性:
实体所具有的某一特性
v域:
属性的取值范围
v结构数据模型:
从计算机实现的观点对数据建模,由数据结构、数据操作和数据约束组成
v数据结构:
描述组成数据库的对象类型,包括数据本身和数据间的联系
v数据操作:
描述对数据库对象实例允许执行的操作
v数据约束:
规定数据库状态以及状态变化所应满足的条件
v三层世界模型
v实体型间的联系
▪一对一:
如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:
1
▪一对多:
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:
n
▪多对多:
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:
n
vE-R模型(概念数据模型)
v常用结构数据模型
▪层次模型:
依据树建立,数据结构简单,查询效率高,但多对多联系表示不自然,插入删除限制较多,应用程序编写比较复杂
▪网状模型:
依据图建立,更直观描述现实世界,存取效率高,但结构复杂,不易被用户掌握
▪关系模型:
依据表建立,具有严格的数学基础,概念单一,存取路径对用户透明,但查询效率较低
1.一门课程可以由多名教师教授,一名教师只能教授一门课程,则课程与教师的联系类型为(B)
A.m:
nB.1:
mC.m:
1D.1:
1
第三章关系数据库:
基本概念
v笛卡尔积:
D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn=
{(d1,d2,…,dn)|diDi,i=1,2,…,n}
v关系:
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的
关系,表示为
R(D1,D2,…,Dn),R称为n元关系
v元祖:
关系中的元素
v候选码:
关系中的一个属性组,其值能唯一标识一个元组。
若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码
v主码:
从多个候选码中选定一个用以标识元组
v外码:
关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,称这个属性组为R的外码
v关系模式:
对关系的描述,R(U,D,DOM,F)
v关系数据库:
所有关系的集合
v关系的完整性约束:
实体完整性、参照完整性、用户自定义完整性
v实体完整性:
若属性A是基本关系R的主属性,则属性A不能取空值
v参照完整性:
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
v或者取空值(F的每个属性值均为空值)
v或者等于S中某个元组的主码值
v关系的性质
v行列的顺序无关紧要
v任意两个元祖不能完全相同
v每一分量不可再分
v列必须同质
定义两个关系R,S,其度分别为n,m,则它们的笛卡尔积是所有这样的元组集合:
元组的前n个分量是R中的一个元组,后m个分量是S中的一个元组。
R´S的度为R与S的度之和,R´S的元组个数为R和S的元组个数的乘积
1.R为4元关系R(A,B,C,D),S为三元关S(B,C,D),则R×S是_________元关系。
第四章SQL:
基本运算
v定义基本表:
CREATETABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]…
[,<表级完整性约束条件>]);
基本表的定义、删除与修改
一、定义基本表
CREATETABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]…
[,<表级完整性约束条件>]);
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
定义基本表
[例7]建立一个“学生选课”表SC
CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
/*主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
/*表级完整性约束条件,Sno是外码,被参照表是Student*/
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);
修改基本表
ALTERTABLE<表名>
[ADD<新列名><数据类型>[完整性约束]]
[DROP<完整性约束名>]
[MODIFY<列名><数据类型>];
[例8]向Student表增加“入学时间”列,其数据类型为日期型。
ALTERTABLEStudentADDS_entranceDATE;
▪不论基本表中原来是否已有数据,新增加的列一律为空值。
[例9]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTERTABLEStudentMODIFYSageINT;
[例10]删除课程名称必须取唯一值的约束条件。
ALTERTABLECourseDROPUNIQUE(Cname);
删除基本表
DROPTABLE<表名>[RESTRICT|CASCADE];
⏹RESTRICT:
删除表是有限制的。
Ø欲删除的基本表不能被其他表的约束所引用
Ø如果存在依赖该表的对象,则此表不能被删除
⏹CASCADE:
删除该表没有限制。
Ø在删除基本表的同时,相关的依赖对象一起删除
[例11]删除Student表
DROPTABLEStudentCASCADE;
⏹基本表定义被删除,数据被删除
⏹表上建立的索引、视图、触发器等一般也将被删除
[例12]若表上建有视图,选择RESTRICT时表不能删除
CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS';
DROPTABLEStudentRESTRICT;
--ERROR:
cannotdroptableStudentbecauseother
objectsdependonit
建立索引
v语句格式
CREATE[UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);
[例13]CREATECLUSTERINDEXStusname
ONStudent(Sname);
▪在Student表的Sname(姓名)列上建立一个聚簇索引
v聚簇索引:
表中记录的物理顺序与索引值的顺序一致
v在最经常查询的列上建立聚簇索引以提高查询效率
v一个基本表上最多只能建立一个聚簇索引
v经常更新的列不宜建立聚簇索引
v索引由系统进行维护,可以提供多种存取路径
[例14]为学生-课程数据库中的Student,Course,SC三个表建立索引。
CREATEUNIQUEINDEXStusnoONStudent(Sno);
CREATEUNIQUEINDEXCoucnoONCourse(Cno);
CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);
Student表按学号升序建唯一索引
Course表按课程号升序建唯一索引
SC表按学号升序和课程号降序建唯一索引
删除索引
vDROPINDEX<索引名>;
删除索引时,系统会从数据字典中删去有关该索引的
描述。
[例15]删除Student表的Stusname索引
DROPINDEXStusname;
数据查询
v语句格式
SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]];
v4.3.1单表查询
v4.3.2连接查询
v4.3.3嵌套查询
v4.3.4集合查询
v4.3.5Select语句的一般形式
4.3.1单表查询
v查询仅涉及一个表:
⏹一、选择表中的若干列
⏹二、选择表中的若干元组
⏹三、ORDERBY子句
⏹四、聚集函数
⏹五、GROUPBY子句
查询全部列
v选出所有属性列:
⏹在SELECT关键字后面列出所有列名
⏹将<目标列表达式>指定为*
[例3]查询全体学生的详细记录。
SELECTSno,Sname,Ssex,Sage,Sdept
FROMStudent;
或SELECT*FROMStudent;
查询经过计算的值
vSELECT子句的<目标列表达式>可以为:
▪算术表达式
▪字符串常量
▪函数
▪列别名
v使用列别名改变查询结果的列标题:
SELECTSnameNAME,'YearofBirth:
’BIRTH,
2007-SageBIRTHDAY,LOWER(Sdept)DEPARTMENT
FROMStudent;
输出结果:
NAMEBIRTHBIRTHDAYDEPARTMENT
------------------------------------------------------
李勇YearofBirth:
1987cs
刘晨YearofBirth:
1988is
王敏YearofBirth:
1989ma
张立YearofBirth:
1988is
4.3.1单表查询
v查询仅涉及一个表:
⏹一、选择表中的若干列
⏹二、选择表中的若干元组
⏹三、ORDERBY子句
⏹四、聚集函数
⏹五、GROUPBY子句
选择表中的若干元组
v1.消除取值重复的行
如果没有指定DISTINCT关键词,则缺省为ALL
[例6]查询选修了课程的学生学号。
SELECTSnoFROMSC;
等价于:
SELECTALLSnoFROMSC;
执行上面的SELECT语句后,结果为:
Sno
200215121
200215121
200215121
200215122
200215122
v指定DISTINCT关键词,去掉表中重复的行
SELECTDISTINCTSno
FROMSC;
执行结果:
Sno
200215121
200215122
2.查询满足条件的元组
表3.4常用的查询条件
(1)比较大小
[例7]查询计算机科学系全体学生的名单。
SELECTSnameFROMStudentWHERESdept=‘CS’;
[例8]查询所有年龄在20岁以下的学生姓名及其年龄。
SELECTSname,SageFROMStudent
WHERESage<20;
[例9]查询考试成绩有不及格的学生的学号。
SELECTDISTINCTSnoFROMSC
WHEREGrade<60;
(2)确定范围
v谓词:
BETWEEN…AND…
NOTBETWEEN…AND…
[例10]查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND23;
[例11]查询年龄不在20~23岁之间的学生姓名、系别和年龄
SELECTSname,Sdept,SageFROMStudent
WHERESageNOTBETWEEN20AND23;
(3)确定集合
v谓词:
IN<值表>,NOTIN<值表>
[例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECTSname,SsexFROMStudent
WHERESdeptIN('IS','MA','CS');
[例13]查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
SELECTSname,SsexFROMStudent
WHERESdeptNOTIN('IS','MA','CS');
(4)字符匹配
v谓词:
[NOT]LIKE‘<匹配串>’[ESCAPE‘<换码字符>’]
1)匹配串为固定字符串
[例14]查询学号为200215121的学生的详细情况。
SELECT*
FROMStudent
WHERESnoLIKE‘200215121';
等价于:
SELECT*FROMStudent
WHERESno='200215121';
2)匹配串为含通配符的字符串
[例15]查询所有姓刘学生的姓名、学号和性别。
SELECTSname,Sno,SsexFROMStudent
WHERESnameLIKE‘刘%’;
[例16]查询姓"欧阳"且全名为三个汉字的学生的姓名。
SELECTSnameFROMStudent
WHERESnameLIKE‘欧阳__’;
v谓词:
[NOT]LIKE‘<匹配串>’[ESCAPE‘<换码字符>’]
1)匹配串为固定字符串
[例14]查询学号为200215121的学生的详细情况。
SELECT*FROMStudent
WHERESnoLIKE‘200215121';
等价于:
SELECT*FROMStudent
WHERESno='200215121';
2)匹配串为含通配符的字符串
[例15]查询所有姓刘学生的姓名、学号和性别。
SELECTSname,Sno,SsexFROMStudent
WHERESnameLIKE‘刘%’;
[例16]查询姓"欧阳"且全名为三个汉字的学生的姓名。
SELECTSnameFROMStudent
WHERESnameLIKE‘欧阳__’;
3)使用换码字符将通配符转义为普通字符
[例19]查询DB_Design课程的课程号和学分。
SELECTCno,CcreditFROMCourse
WHERECnameLIKE'DB\_Design'ESCAPE'\‘;
[例20]查询以"DB_"开头,且倒数第3个字符为i的课程的详细情况。
SELECT*FROMCourse
WHERECnameLIKE'DB\_%i__'ESCAPE'\‘;
ESCAPE'\'表示“\”为换码字符
(5)涉及空值的查询
⏹谓词:
ISNULL或ISNOTNULL
⏹“IS”不能用“=”代替
[例21]某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
SELECTSno,CnoFROMSC
WHEREGradeISNULL
[例22]查所有有成绩的学生学号和课程号。
SELECTSno,CnoFROMSC
WHEREGradeISNOTNULL;
(6)多重条件查询
v逻辑运算符:
AND和OR来联结多个查询条件
vAND的优先级高于OR
v可以用括号改变优先级
v可用来实现多种其他谓词
v[NOT]IN
v[NOT]BETWEEN…AND…
[例23]查询计算机系年龄在20岁以下的学生姓名。
SELECTSnameFROMStudent
WHERESdept='CS'ANDSage<20;
三、ORDERBY子句
⏹ORDERBY子句
⏹可以按一个或多个属性列排序
⏹升序:
ASC;降序:
DESC;缺省值为升序
⏹当排序列含空值时
⏹ASC:
排序列为空值的元组最后显示
⏹DESC:
排序列为空值的元组最先显示
[例24]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
SELECTSno,GradeFROMSC
WHERECno='3'ORDERBYGradeDESC;
[例25]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
SELECT*FROMStudent
ORDERBYSdept,SageDESC;
四、聚集函数
v聚集函数:
▪计数
COUNT([DISTINCT|ALL]*)
COUNT([DISTINCT|ALL]<列名>)
▪计算总和
SUM([DISTINCT|ALL]<列名>)
▪计算平均值
AVG([DISTINCT|ALL]<列名>)
▪最大最小值
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
[例26]查询学生总人数。
SELECTCOUNT(*)
FROMStudent;
[例27]查询选修了课程的学生人数。
SELECTCOUNT(DISTINCTSno)FROMSC;
[例28]计算1号课程的学生平均成绩。
SELECTAVG(Grade)FROMSC
WHERECno='1';
[例29]查询选修1号课程的学生最高分数。
SELECTMAX(Grade)FROMSC
WHERCno=‘1’;
[例30]查询学生200215012选修课程的总学分数。
SELECTSUM(Ccredit)SC.Cno=Course.Cno;
五、GROUPBY子句
vGROUPBY子句分组:
细化聚集函数的作用对象
▪未对查询结果分组,聚集函数将作用于整个查询结果
▪对查询结果分组后,聚集函数将分别作用于每个组
▪作用对象是查询的中间结果表
▪按指定的一列或多列值分组,值相等的为一组
[例31]求各个课程号及相应的选课人数。
SELECTCno,COUNT(Sno)FROMSC
GROUPBYCno;
查询结果:
CnoCOUNT(Sno)
122
234
344
433
548
[例32]查询选修了3门以上课程的学生学号。
SELECTSnoFROMSC
GROUPBYSnoHAVINGCOUNT(*)>3;
vHAVING短语与WHERE子句的区别:
▪作用对象不同
▪WHERE子句作用于基表或视图,从中选择满足条件的元组
▪HAVING短语作用于组,从中选择满足条件的组。
4.3.2连接查询
v连接查询:
同时涉及多个表的查询
v连接条件或连接谓词:
用来连接两个表的条件
一般格式:
⏹[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
⏹[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>
v连接字段:
连接谓词中的列名称
⏹连接条件中的各连接字段类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 复习