26、数据独立性是指 应用程序 和 数据 之间相互独立,不受影响。 27、数据独立性分成 逻辑 独立性和 物理 独立性两级。
28、数据库管理系统(DBMS)提供 DML(数据操纵语言) 实现对数据库中数据的检索和更新等操作。 29、数据库系统(DBS)是由 数据库 、 硬件 、 软件 、和 数据库用户 四部分组成。 30、DBS中最重要的软件是 DBMS ;最重要的用户是 DBA 。 31、采用了 数据库 技术的计算机系统称为DBS。
32、数据库用户分为四类,分别是 DBA 、 专业用户 、 应用程序员 和 最终用户 。
33、DBS中负责数据库物理结构与逻辑结构的定义和修改的人员,称为 DBA ,使用宿主语言和DML编写应用程序的人员,称为 应用程序的人员 ,使用应用程序对数据库进行操作的人员,称为 最终用户 。
34、数据库管理员DBA与DBMS的界面是 数据库模式 ;专业用户与DBMS的界面是 数据库查询 。 35、应用程序员与DBMS的界面是 子模式 ;最终用户和DBMS的界面是 应用界面 。 36、关系模型由 关系的数据结构 、 关系的操作集合 、 关系的完整性约束 三部分组成。 37、关系的完整性分为 实体完整性 、 参照完整性 、 用户定义完整性 三类。
38、关系代数运算中 并 、 差 、 笛卡儿积 、 投影 和 选择 是5个基本关系运算,其他运算可以从基本的运算中导出。
39、关系代数的连接运算中当θ为“=”的连接称为 等值连接 ,且当比较的分量是相同的属性组时,则称为 自然连接 。
40、关系运算主要有 关系代数运算 、 元组演算 、 域演算 三种,在关系的表达能力上 等价的 是可以相互转换。
41、SQL语言的功能包括 数据查询 、 数据操纵 、 数据定义 和 数据控制 。 42、SQL以同一种语法格式,提供 自含式 和 嵌入式 两种使用方式。
43、关系数据库是以 关系模型 为基础的数据库,利用 关系 描述现实世界,一个关系既可以描述 一个实体及属性 ,也可以描述 实体之间的联系 。
44、在关系数据库中,二维表称为一个 关系 ,表的每一行称为 元组 ,表的每一列称为 属性 。 45、数据完整性约束分为 静态约束 和 动态约束 两类。
46、关系数据库设计理论,主要包括三个方面内容: 数据依赖 、 范式 和 模式设计方法 。其中 数据依赖 起着核心的作用。
54、X→Y是模式R的一个函数依赖,在当前值r的两个不同元组中,如果X值相同,就一定要求 Y值也相同 。也就是说,对于X的每一个具体值,都有 Y唯一的具体值 与之对应。
55、设F是关系模式R的一个函数依赖集,X,Y是R的属性子集,如果 从F中的函数依赖也能够推出X→Y ,则称F逻辑蕴涵X→Y,记为 F逻辑蕴涵X→Y 。被F逻辑蕴涵的函数依赖的全体构成的集合,称为 F的闭包(函数依赖的闭包) ,记作 F+ 。
三、名词解释
1、域、关系、元组、属性
答:域:域是一组具有相同数据类型的值的集合。
关系:在域 D1,D2,…,Dn上笛卡尔积D1×D2×…×Dn的子集称为关系,表示为R(D1,D2,…,Dn)
元组:关系中的每个元素是关系中的元组。
属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性( Attribute)。 2、模式、内模式、外模式
答:(1)外模式,亦称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用研究有关的数据的逻辑表示。
(2)模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。 (3)内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据库的物理结构和存储方式的描述。
3、候选码、主码、外码
答:候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码( Candidate key)。 主码:若一个关系有多个候选码,则选定其中一个为主码( Primary key)。
外部码:设 F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码(Foreign key),简称外码。
基本关系 R称为参照关系(Referencing relation),基本关系S称为被参照关系(Referenced relation)或目标关系(Target relation)。关系R和S可以是相同的关系。 4、函数依赖、部分函数依赖、完全函数依赖、传递函数依赖
答:函数依赖:设 R (U)是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R (U)的任意一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同, 而在Y上的属性值不同, 则称“X函数确定Y”或“Y函数依赖于X”,记作X?Y。
完全函数依赖、部分函数依赖:在 R(U)中,如果X?Y,并且对于X的任何一个真子集X,都有X′?Y,则称Y对X完全函数依赖;若X?Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。 传递依赖:在关系R (U)中,如果X?Y(Y?X),Y?X,Y?Z,则称Z对X传递函数依赖。
四、SQL语言
(一)设学生-课程数据库有如下关系表,请用SQL完成下面的查询及数据操纵
STUDENT(SNO,SNAME,SEX,BIRTHDAY,ADDRESS,TELEPHONE);
//学生(学生号,学生名,性别,出生日期,家庭住址,联系电话) COURSE(CNO,CNAME,LHOUR,CREDIT);
//课程(课程号,课程名,学时,学分) SC_SCORE(SNO,CNO,GRADE);
//学生选课(学生号,课程号,成绩)
1、查询学生学号、姓名、性别、出生日期;(学生表的投影)
SELECT SNO, SNAME, SEX, BIRTHDAY FROM STUDENT ; 2、查询所有女生的学号、姓名及家庭住址;(学生表的选择)
SELECT SNO, SNAME, ADDRESS FROM STUDENT WHERE SEX='女' ;
3、查询1980年以前出生的学生学号、姓名、性别、出生日期;(学生表的选择与投影)
SELECT SNO, SNAME, SEX, BIRTHDAY FROM STUDENT WHERE BIRTHDAY<'1980-01-01' ; 或
SELECT SNO, SNAME, SEX, BIRTHDAY FROM STUDENT WHERE Year(BIRTHDAY)<1980 ; 4、查询1979年到1981年出生的学生姓名、性别及出生日期;
SELECT SNAME, SEX, BIRTHDAY FROM STUDENT WHERE BIRTHDAY BETWEEN '1979-1-1' AND '1981-12-31'; 或
SELECT SNAME, SEX, BIRTHDAY FROM STUDENT WHERE Year(BIRTHDAY) BETWEEN 1979 AND 1981; 5、查询所有姓李学生的学号,姓名,住址,电话;(模糊查询)
SELECT SNO, SNAME, ADDRESS, TELEPHONE FROM STUDENT WHERE SNAME LIKE '李%'; 6、查询所有不姓李学生的学号,姓名,住址,电话;(模糊查询)
SELECT SNO, SNAME, ADDRESS, TELEPHONE FROM STUDENT WHERE SNAME Not LIKE '李%'; 7、查询计算机系所开课程(课程号以CS开头)的课程号、课程名和学分数;(模糊查询)
SELECT CNO, CNAME, CREDIT FROM COURSE WHERE CNO LIKE 'CS%'; 8、查询至少选修一门计算机系课程的女生的姓名;
SELECT DISTINCT SNAME FROM STUDENT, SC_SCORE
WHERE STUDENT.Sno=SC_SCORE.Sno AND CNO LIKE 'CS%' AND SEX='女'; 9、查询学生选修课程的成绩:学生名,课程名,成绩; (连接查询)
——学生名--STUDENT表中;课程名_COURSE;成绩:SC_SCORE;——涉及了多张表,表的连接
SELECT SNAME, CNAME, SCORE FROM STUDENT, COURSE, SC_SCORE WHERE STUDENT.SNO=SC_SCORE.SNO AND SC_SCORE.CNO=COURSE.CNO; 10、查询学生选修课程总分( SUM(SCORE) )和课程数( COUNT(*) );(统计查询) ——统计:聚集函数; GROUP BY SNO;——成绩表:SC_SCORE
SELECT SNO, SUM(SCORE), COUNT(*) FROM SC_SCORE GROUP BY SNO; 11、分别统计男、女生的人数;(统计查询)
——使用聚集函数就要用GROUP BY; 检索的结果列只能出现聚集列与GROUP BY 后出现的列;
SELECT SEX, COUNT(*) FROM STUDENT GROUP BY SEX ;
12、按课程统计每门课程的平均分、总分、最高分、最低分;(统计查询)
SELECT CNO,AVG(SCORE),SUM(SCORE),MAX(SCORE),MIN(SCORE) FROM SC_SCORE GROUP BY CNO; 13、统计每门课程的选课人数、最高分、最低分和总分;(统计查询)
SELECT CNO , COUNT(CNO),MAX(SCORE),MIN(SCORE),SUM(SCORE) FROM SC_SCORE GROUP BY CNO; 14、统计学生表中的最大出生日期,最小出生日期;(统计查询)
SELECT MAX(BIRTHDAY), MIN(BIRTHDAY) FROM STUDENT ; 15、查询李民选修课程的总成绩;(统计查询)
SELECT SNAME, SNM(SCORE) FROM STUDENT, SC_SCORE WHERE STUDENT.sno=sc_SCORE.sno AND SNAME='李民' GROUP BY SNAME;
16、查询李民选修课程的总成绩、平均成绩、选修的课程数(统计查询)
SELECT SNAME,sum(SCORE),avg(SCORE),count(*) FROM STUDENT,sc_SCORE
WHERE STUDENT.sno=sc_SCORE.sno AND STUDENT.SNAME='李民' GROUP BY SNAME;
17、查询所有课程成绩均在80分以上的学生的姓名、学号;(嵌套查询)
SELECT SNAME ,SNO FROM STUDENT
WHERE SNO IN ( SELECT SNO FROM SC_SCORE GROUP BY SNO HAVING MIN(SCORE) >=80 ); 18、向sta表插入新生记录('20010649','张明','男',’汉族’,'1982-10-8');(插入操作)
INSERT INTO sta ( sno, SNAME, sex, birthday ) VALUES ( '20010649', '张明', '男',’汉族’, '1982-10-8' ) ; 19、将学生表中所有女生的出生日期加上一年;(更新操作)
UPDATE STUDENT
SET BIRTHDAY= BIRTHDAY +365 WHERE SEX=’女’;
21、将所有选修\计算机基础\课程的学生成绩下降20%,再另增加10分;(带子查询的更新操作)
UPDATE SC_SCORE
SET SCORE=SCORE-SCORE*0.2+10 WHERE CNO IN
( SELECT CNO FROM COURSE WHERE CNAME='计算机基础' );
22、删除学号为20010649的学生信息;(删除操作)
DELETE FORM SC_SCORE WHERE SNO=’20010649’ ; DELETE FROM STUDENT WHERE SNO='20010649'; 23、删除无人选修的课程。(带子查询删除操作)
DELETE FROM COURSE
WHERE CNO NOT IN ( SELECT CNO FROM SC_SCORE );
24、创建名为S_G视图,用于查询每个学生的平均成绩,要求包括:学号,姓名及平均成绩;
CREATE VIEW S_G(SNO, SNAME, GAVG) AS
SELECT SNO, SNAME, AVG(GRADE) FROM STUDENT, SC_SCORE
WHERE STUDENT.SNO=SC_SCORE GROUP BY SNO ; 25、将查询STUDENT表的权限授予 WangLin;
GRANT SELECT ON TABLE SUTDENT TO WangLin;

