数据库复习工程学院期末.docx
- 文档编号:20156636
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:24
- 大小:178.27KB
数据库复习工程学院期末.docx
《数据库复习工程学院期末.docx》由会员分享,可在线阅读,更多相关《数据库复习工程学院期末.docx(24页珍藏版)》请在冰豆网上搜索。
数据库复习工程学院期末
CH1绪论
1.掌握数据库的四个基本概念:
数据、数据库以及基本特征、数据库管理系统以及主要功能、数据库系统及构成。
数据:
是数据库中存储的基本对象。
描述事物的符号记录。
数据库:
是长期储存在计算机内、有组织的、可共享的大量数据的集合
§数据库的基本特征
★数据按一定的数据模型组织、描述和储存(结构化)
★可为各种用户共享
★冗余度较小
★数据独立性较高
★易扩展
数据库管理系统:
位于用户与操作系统之间的一层数据管理软件。
是基础软件,是一个大型复杂的软件系统。
科学地组织和存储数据、高效地获取和维护数据。
主要功能:
●数据定义功能
●数据组织、存储和管理
●数据操纵功能DML
●数据库的事务管理和运行管理
●数据库的建立和维护功能(实用程序)
●其它功能
数据库系统:
在计算机系统中引入数据库后的系统构成
构成:
数据库、数据库管理系统、应用系统、数据库管理员(DBA)
2.了解数据管理技术的三个发展阶段以及特点。
3.数据模型的基本概念以及三个要素。
数据模型:
是现实世界数据特征的抽象。
是数据库系统的核心和基础
三个要素:
★数据结构:
是对系统静态特性的描述。
★数据操作:
是对系统动态特性的描述。
★完整性约束条件:
一组完整性规则的集合。
4.掌握数据两个独立性的含义。
●物理独立性:
指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。
当数据的物理存储改变了,应用程序不用改变。
●逻辑独立性:
指用户的应用程序与数据库的逻辑结构是相互独立的。
数据库的逻辑结构改变了,用户程序也可以不变。
5.掌握概念模型(信息模型)的基本概念(实体,属性,码,域,实体型,实体集,三类联系);
概念模型用于信息世界的建模。
(1)实体(Entity)
★客观存在并可相互区别的事物称为实体。
★可以是具体的人、事、物或抽象的概念。
(2)属性(Attribute)
★实体所具有的某一特性称为属性。
★一个实体可以由若干个属性来刻画。
(3)码(Key)
★唯一标识实体的属性集称为码。
(4)域(Domain)
★属性的取值范围称为该属性的域。
(5)实体型(EntityType)
★用实体名及其属性名集合来抽象和刻画同类实体称为实体型
(6)实体集(EntitySet)
★同一类型实体的集合称为实体集
(7)联系(Relationship)
★现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
★实体内部的联系通常是指组成实体的各属性之间的联系
★实体之间的联系通常是指不同实体集之间的联系
一对一联系(1:
1)
一对多联系(1:
n)
多对多联系(m:
n)
两个以上实体型之间的联系
§多个实体型间的一对一联系
§两个以上实体型之间一对多联系
§两个以上实体型间的多对多联系
6.掌握概念模型的表示方式(E-R方法),能够根据描述画出对应的E-R图;
7.掌握数据库系统的三级模式结构;数据库的二级映像功能与数据独立性的关系;
三级模式结构:
●模式(Schema)
●外模式(ExternalSchema)也称子模式或用户模式。
介于模式与应用之间。
●内模式(InternalSchema)(也称存储模式)一个数据库只有一个内模式。
数据库的二级映像功能与数据独立性的关系:
★外模式/模式映像:
保证数据的逻辑独立性
★模式/内模式映像:
保证数据的物理独立性
CH2关系数据库
1.掌握关系模型、关系的基本概念(笛卡尔积、关系、候选码、主码、主属性、非码属性、全码、外部码);
关系模型:
用二维表的形式表示实体和实体间联系的数据模型
笛卡尔积:
域上的一种集合运算,所有域的所有取值的一个组合。
笛卡尔积可以表示为一个二维表。
关系(Relation):
一个关系对应通常说的一张表。
现实世界的实体以及实体间的各种联系均用关系来表示。
候选码(Candidatekey):
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
●简单的情况:
候选码只包含一个属性
●最极端的情况:
关系模式的所有属性组是这个关系模式的候选码,称为全码。
主码:
若一个关系有多个候选码,则选定其中一个为主码(Primarykey)
主属性:
候选码的诸属性称为主属性(Primeattribute)
非主属性:
不包含在任何侯选码中的属性称为非主属性,也称非码属性
域是一组具有相同数据类型的值的集合。
2.掌握三类完整性约束
●实体完整性
●参照完整性
●用户定义的完整性
3.掌握关系代数语言
五种基本操作:
选择、投影、并、差、笛卡尔积。
1)集合运算:
交、并、差和笛卡尔积,能够根据要求进行集合运算
2)关系运算:
选择、投影、连接和除,能够根据要求写出对应的关系代数式
例如:
设有如下所示的关系S(S#,SNAME,AGE,SEX)、C(C#,CNAME,TEACHER)和SC(S#,C#,GRADE),试用关系代数表达式表示下列查询语句:
(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。
(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。
(3)检索”李强”同学不学课程的课程号(C#)。
(4)检索至少选修两门课程的学生学号(S#)。
(5)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。
(6)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。
解:
本题各个查询语句对应的关系代数表达式表示如下:
(1). ∏C#,CNAME(σTEACHER=‘程军’(C))
(2). ∏S#,SNAME(σAGE>21∧SEX=”男”(C))
(3). ∏C#(C)- ∏C#(σSNAME=‘李强’(S) wv SC)
(4). ∏S#(σ[1]=[4]∧[2]≠[5] (SC × SC))
(5). ∏S#(SCwv ∏C#(σTEACHER=‘程军’(C)))
(6). ∏S#,SNAME{swv [∏S#(SCwv σCNAME=‘C语言’(C))]}
Ch3关系数据库标准语言SQLCh5数据库的完整性ch8数据库编程
1.掌握SQL的9个核心动词。
数据查询:
SELECT(查询出数据,也可用于变量赋值)
数据定义(表/视图/查询/存储过程/自定义函数/索引/触发器等):
CREATE(创建)、DROP(删除)、ALTER(修改)
数据操作:
INSERT(插入)、UPDATE(更新)、DELETE(删除)
数据控制:
Grant(授权)、revoke(回收权限)
2.掌握SQLSERVER的命令,能够根据要求写出对应的SQL语言
1)创建数据库(createdatabase)的命令。
CREATEDATABASEstuDB2
ONPRIMARY--默认就属于PRIMARY主文件组,可省略
(NAME='stuDB_data',--主数据文件的逻辑名
FILENAME='D:
\project\stuDB_data.mdf',--主数据文件的物理名
SIZE=5mb,--主数据文件初始大小
MAXSIZE=100mb,--主数据文件增长的最大值
FILEGROWTH=15%--主数据文件的增长率
)
LOGON
(NAME='stuDB_log',
FILENAME='D:
\project\stuDB_log.ldf',
SIZE=2mb,
FILEGROWTH=1MB
)
GO
DROPDATABASEemployees
2)基本表的创建、修改与删除,能够根据要求进行适当的完整性定义。
CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
/*主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
/*表级完整性约束条件,Sno是外码,被参照表是Student*/
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);
●ALTERTABLE表名
ALTERCOLUMN列名类型NULL/NOTNULL
●ALTERTABLE表名
ADD列名类型列级约束
●ALTERTABLE表名
ADDCONSTRAINT约束名约束
Eg:
ALTERTABLECourse
ADDCONSTRAINTUK_C_CNAMEUNIQUE(Cname);
●ALTERTABLE表名
DROPCOLUMN列名
●ALTERTABLE表名
DROPCONSTRAINT约束名
DROPTABLEStudentCASCADE;
3)索引的创建与删除
一个聚簇索引:
CREATECLUSTEREDINDEXStusname
ONStudent(Sname);
一个唯一索引:
CREATEUNIQUEINDEXStusno
ONStudent(Sno);--Student表按学号升序建唯一索引
[例15]删除Student表的Stusname索引
DROPINDEXstudent.Stusname;
4)查询
1、查询语句的一般格式:
select [all/distinct]<*/选择列表> from <基表名>
[where<条件表达式>]
[group by <列名1>[having<条件表达式>] [order by <列名2> asc/desc
*说明:
distinct为去掉重复的关键字;表示条件表达式用where子句;分组用group by 子句,如果要求分组满足某个条件才查询用having子句来限定分组 ;排序用order by 子句 2、用于条件表达式中几个特殊运算符的意义和使用方法
(1)BETWEEN:
字段的内容在指定范围内。
用法:
<字段>BETWEEN <范围初值>AND<范围终值> 相当于:
字段>=范围初值 AND 字段<=范围终值
(2)LIKE:
对字符型数据进行字符串比较,提供两种通配符,“_”、“%” 用法:
<字段>LIKE<字符表达式> 如:
姓名LIKE “李%”
(3)IN:
字段内容是结果集合或者子查询中的内容 用法:
<字段>IN(<子查询>)
例6:
对学生管理数据库,列出选修“数据库原理”或“软件工程”的所有学生的学号。
*SELECT 学号 FROM 选课 WHERE 课程号 IN;
(SELECT 课程号 FROM 课程 WHERE 课程名=“数据库原理” OR 课程名=“软件工程”) (4)ALL:
满足子查询中所有值的记录
用法:
<字段> <比较符> ALL (<子查询>)
例7:
SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=ALL(SELECT 工资 FROM 教师 WHERE 系号=“02”)表示从教师表中查询工资大于02号系中最高工资的系号。
也可以写为:
SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=(SELECT MAX(工资) FROM 教师 WHERE 系号码=“02”)
(5)ANY:
满足子查询中任意一个值的记录。
用法:
<字段><比较符> ALL (<子查询>) (6)NULL:
空值
用法:
IS NULL或IS NOT NULL
例8:
查询选课表中,成绩为空值的记录。
SELECT * FROM 选课 WHERE 成绩 IS NULL 3、常用的函数
(1)SUM(<字段名>):
给出一列数据的和
(2)AVG( <字段名>):
求一列数据的平均值 (3)COUNT(*):
输出查询的行数 例9:
计算教师中工资合计。
SELECT SUM(工资) FROM 教师 4、多表查询
from后面可以同时打开多个表,select后面可以取来自不同表的字段,只需在字段名前用来源表名“.”来标注,where后面写出各表之间的联接条件。
例10:
对学生管理数据库,列出少数民族学生的学号、姓名、课程号和成绩。
SELECT 学生.学号,学生.姓名,选课.课程号,选课.成绩 FROM 学生,选课; WHERE 学生.学号=选课.学号 AND 少数民族否 用内部联接的方法可写为:
SELECT 学生.学号,学生.姓名,选课.课程号,选课.成绩 FROM 学生 INNER JOIN 选课 ON 学生.学号=选课.学号; WHERE 少数民族否 内部联接(INNER JOIN):
<表名1>INNER JOIN <表名2> ON <联接条件> 5、查询结果处理
INTO CURSOR将查询结果存放在临时表中;INTO TABLE <表>存放在一个表中;TO FILE <文件名>存放在文本文件中。
WHERESnameLIKE'刘%';
WHERESnameLIKE'欧阳_';
查询以"DB_"开头,且倒数第3个字符为i的课程的详细情况。
WHERECnameLIKE'DB\_%i__'
ESCAPE'\‘;
按分数降序排列
WHERECno='3'
ORDERBYGradeDESC
5)更新
UPDATE agents
SET percent = 1.1 * percent WHERE city = „New York‟
6)视图
§建立信息系学生的视图。
CREATEVIEWIS_Student
AS
SELECTSno,Sname,Sage
FROMStudent
WHERESdept='IS';
§语句的格式:
DROPVIEW<视图名>[CASCADE];
DROPVIEWIS_S1CASCADE;
3.掌握ANY、ALL、聚集函数、IN之间的等价转换关系
4.掌握SQL中的保留字及其含义(ALL、DISTINCT、GROUPBY、HAVING等)
查询选修了3门以上课程的学生学号。
SELECTSno
FROMSC
GROUPBYSno
HAVINGCOUNT(*)>3;
[例35]查询每一门课的间接先修课(即先修课的先修课)
SELECTFIRST.Cno,SECOND.Cpno
FROMCourseFIRST,CourseSECOND
WHEREFIRST.Cpno=SECOND.Cno;
注意:
1、使用GROUPBY子句时,SELECT列表中的非汇总列必须为GROUPBY列表中的项。
2、分组时,所有的NULL值分为一组。
3、GROUP BY列表中一般不允许出现复杂的表达试、显示标题以及SELECT列表中的位置标号。
注意事项:
HAVING后的条件不能用别名COUNT>3必须使用COUNT(*)>3,否则报:
列名'COUNT'无效。
having子句中的每一个元素并不一定要出现在select列表中
--如果指定了SELECTDISTINCT,那么ORDERBY子句中的项就必须出现在选择列表中。
例如:
SELECTDISTINCTBOOKID,BOOKNAMEFROMBOOKORDERBYBOOKNAME
SELECTDISTINCTBOOKID,BOOKNAMEFROMBOOK
SELECTBOOKID,BOOKNAMEFROMBOOKGROUPBYBOOKID,BOOKNAME
以上两句查询结果是一致的,DISTINCT的语句其实完全可以等效的转换为GROUPBY语句
5.掌握视图的特点。
●视图能够简化用户的操作
●视图使用户能以多种角度看待同一数据
●视图对重构数据库提供了一定程度的逻辑独立性
●视图能够对机密数据提供安全保护
●适当的利用视图可以更清晰的表达查询
6.掌握触发器的三种类型以及两个临时表inserted、deleted的作用
●DELETE触发器
●INSERT触发器
●UPDATE触发器
创建触发器的语法
CREATETRIGGERtrigger_name
ONtable_name
[WITHENCRYPTION]
FOR/AFTER/INSTEADOF
[DELETE,INSERT,UPDATE]
AS
T-SQL语句
GO
注意:
WITHENCRYPTION表示加密触发器定义的SQL文本
DELETE,INSERT,UPDATE指定触发器的类型
7.能够进行游标的使用。
DECLARE游标名称CURSORFORSELECT字段,字段,字段,...FROM表名WHERE...
OPEN游标名称
FETCHNEXTFROM游标名称INTO变量名,变量名,变量名,...
WHILE@@FETCH_STATUS=0
BEGIN
SQL语句执行过程......
FETCHNEXTFROM游标名称INTO变量名,变量名,变量名,...
END
CLOSE游标名称
DEALLOCATE游标名称
--使用游标打印输出学生学号
DECLARE@XHVARCHAR(10)
DECLARESTUCURCURSORFORSELECTSNOFROMSTUDENT
OPENSTUCUR
FETCHNEXTFROMSTUCURINTO@XH
WHILE@@FETCH_STATUS=0
BEGIN
PRINT@XH
FETCHNEXTFROMSTUCURINTO@XH
END
CLOSESTUCUR
DEALLOCATESTUCUR
Fetch函数的参数表
§Next移至下一行
§Prior移至上一行
§First移至第一行
§Last移至末行
§Absoluten绝对位移第n行
§Relativen从当前位置移n行
--使用嵌套游标打印输出学生成绩单
DECLARE@XHVARCHAR(10),@XMVARCHAR(10)
DECLARESTUCURCURSORFORSELECTSNO,SNAMEFROMSTUDENT
OPENSTUCUR
FETCHNEXTFROMSTUCURINTO@XH,@XM
WHILE@@FETCH_STATUS=0
BEGIN
PRINT'学号:
'+@XH+''+@XM+'的成绩单'
打印该同学的成绩单…
FETCHNEXTFROMSTUCURINTO@XH,@XM
END
CLOSESTUCUR
DEALLOCATESTUCUR
打印该同学的成绩单…
DECLARE@KCMVARCHAR(20),@CJINT
DECLARESCCURCURSORFOR
SELECTCNAME,GRADEFROMSC,COURSE
WHERESC.CNO=COURSE.CNOANDSC.SNO=@XH
OPENSCCUR
FETCHNEXTFROMSCCURINTO@KCM,@CJ
IF@@FETCH_STATUS<>0
PRINT'没有选课记录'
WHILE@@FETCH_STATUS=0
BEGIN
PRINT''+@KCM+''+CAST(@CJASCHAR(8))
FETCHNEXTFROMSCCURINTO@KCM,@CJ
END
CLOSESCCUR
DEALLOCATESCCUR
8.能够根据要求编写存储过程、函数和触发器
标量函数创建语法
CREATEFUNCTIONfunction_name
([参数名参数类型[=默认值][,...n]])
RETURNS返回值类型
[WITH
[AS]
BEGIN
function_body
RETURN表达式
END
标量用户定义函数示例——创建函数
USENorthwind
CREATEFUNCTIONfn_DateFormat
(@indatedatetime,@separatorchar
(1))
RETURNSNchar(20)
AS
BEGIN
RETURN
CONVERT(Nvarchar(20),datepart(mm,@indate))
+@separator
+CONVERT(Nvarchar(20),datepart(dd,@indate))
+@separator
+CONVERT(Nvarchar(20),datepart(yy,@indate))
END
标量用户定义函数示例——调用函数
SELECTdbo.fn_DateFormat(GETDATE(),':
')
多语句表值函数
CREATEFUNCTIONfunction_name
([参数名参数类型[=默认值][,...n]])
RETURNS@return_variableTABLE<表定义>
[WITH
[AS]
BEGIN
function_body
RETURN
END
多语句表值函数示例
USENorthwind
GO
CREATEFUNCTIONfn_Employees(@lengthnvarchar(9))
RETURNS@fn_Employeestable
(EmployeeIDintPRIMARYKEYNOTNULL,
[EmployeeName]nvarchar(61)NOTNULL)
AS
BEGIN
IF@length='ShortName'
INSERT@fn_Employees
SELECTEmployeeID,LastName
FROMEmployees
ELSEIF@length='LongName'
INSERT@fn_Employees
SELECTEmployeeID,(FirstName+''+LastName)
FROMEmployees
RETURN
END
SELECT*FROMdbo.fn_Employees('LongName')
或
SELECT*FROMdbo.fn_Employees('ShortName')
内嵌表值函数
CREATE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 复习 工程学院 期末