数据库复习.docx

上传人:b****0 文档编号:17961022 上传时间:2023-08-05 格式:DOCX 页数:47 大小:364.74KB
下载 相关 举报
数据库复习.docx_第1页
第1页 / 共47页
数据库复习.docx_第2页
第2页 / 共47页
数据库复习.docx_第3页
第3页 / 共47页
数据库复习.docx_第4页
第4页 / 共47页
数据库复习.docx_第5页
第5页 / 共47页
数据库复习.docx_第6页
第6页 / 共47页
数据库复习.docx_第7页
第7页 / 共47页
数据库复习.docx_第8页
第8页 / 共47页
数据库复习.docx_第9页
第9页 / 共47页
数据库复习.docx_第10页
第10页 / 共47页
数据库复习.docx_第11页
第11页 / 共47页
数据库复习.docx_第12页
第12页 / 共47页
数据库复习.docx_第13页
第13页 / 共47页
数据库复习.docx_第14页
第14页 / 共47页
数据库复习.docx_第15页
第15页 / 共47页
数据库复习.docx_第16页
第16页 / 共47页
数据库复习.docx_第17页
第17页 / 共47页
数据库复习.docx_第18页
第18页 / 共47页
数据库复习.docx_第19页
第19页 / 共47页
数据库复习.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据库复习.docx

《数据库复习.docx》由会员分享,可在线阅读,更多相关《数据库复习.docx(47页珍藏版)》请在冰点文库上搜索。

数据库复习.docx

数据库复习

第一章绪论:

基本概念

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连接字段:

连接谓词中的列名称

⏹连接条件中的各连接字段类型

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2