《《数据库技术与应用》第4章习题答案》由会员分享,可在线阅读,更多相关《《数据库技术与应用》第4章习题答案(4页珍藏版)》请在金锄头文库上搜索。
1、第4章 关系数据库标准语言SQL1. 试述关系数据库标准语言SQL的特点。解:SQL语言是一种功能强大、通用性好又简单易学的语言,主要特点包括:l 综合统一:SQL语言将数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能集于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。l 高度非过程化:用SQL语言进行数据操作只要提出“做什么”,而无需指明“怎么做”。 l 面向集合操作:SQL采用集合操作方式。不仅查询的结果可以是元组的集合,而且一次插入、更新、删除操作的对象也可以是元组的集合。l 支持关系数据库的三级模式结构:外模式对应于视图(View),模式对应于基本表,内模式
2、对应于存储文件。l 简洁易学,灵活易用:SQL语言简洁,只有少量关键字,语法简单。SQL的使用方式非常灵活,可以直接通过SQL实现人机交互,还可以将SQL语句嵌入到其他高级语言程序中来使用。2. 概述SQL的基本功能。解:SQL语言是一种综合的、通用的、功能强大的关系数据库语言,集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体。数据定义功能。主要用于定义、删除和修改关系数据库中的对象,数据库对象主要包括基本表、视图等。数据查询功能。运用SELECT语句来实现查询数据的功
3、能。数据操纵功能。主要用于增加、删除和修改数据库中的数据。数据控制功能。主要用来控制用户对数据库的操作权限,包括数据库安全控制和事物管理两部分。3. 什么是基本表?什么是视图?两者的区别和联系是什么?解:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。试图是从一个或几个基本表导出的表。试图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据。视图与表的区别:概念不同。表是使用DBMS的DDL定义的,拥有真实数据的,以独立文件的形式存储在计算机外存上的具有固定模式结构和相应元组数据的实表。视图则是利用带有查询语句的视图定义,从表或视图中导出的虚表。数据
4、有效期不同。表示拥有真实数据的实表,而视图是没有数据,只有视图定义的虚表。数据存储不同。表是永久存储在外存,而视图是执行时创建临时表,用后释放。更新方式不同。表一般可以任意更新,而视图一般不能任意更新,会受到一定限制。视图与表的联系:视图最终是定义在表之上,其数据最终来自表。表是创建视图的基础,并为视图提供数据。如果表发生了改变(或者被删除),则必须修改(删除、或者重新建立)相应的视图。对于最终用户,视图与表基本相同,即:视图和表在用户看来都是表,用户可以按照表的使用方法来使用视图,同时可以在视图上再定义视图。4. 说明使用视图的优点。解:视图是关系数据库系统提供给用户以多种角度观察数据库中数
5、据的重要机制。合理的使用视图能带来许多好处。使用视图的优点有:l 视图能够简化用户的操作l 视图使用户能以多种角度看待同一数据l 视图提供了一定程度的逻辑独立性l 视图能够对数据提供安全保护5. 是否所有的视图都是可以更新的?为什么?解:不是所有的视图都是可以更新的。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。例如,基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。6. 设有一个学生-课程数据库SC,其中有S,C,SC三张表
6、S (Sno, Sname, sex, age, dept)C (Cno, Cname, credit)SC (Sno, Cno, grade)其中学生表S由学号Sno、姓名Sname、性别sex、年龄age、专业dept组成;课程表C由课程编号Cno、课程名称Cname、课程学分credit组成;选课表SC由学号Sno、课程编号Cno、成绩grade组成;试用SQL语句建立这三张表。解:建立学生表S:CREATE TABLE S(Sno CHAR(9) PRIMARY KEY,Sname CHAR (8) NOT NULL,sex CHAR (2) ,age SMALLINT,dept CH
7、AR (20) );建立课程表C:CREATE TBALE C(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40),credit SMALLINT);建立选课表SC:CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES S(Sno),FOREIGN KEY (Cno) REFERENCES C(Cno);7. 针对习题6中的三个表用SQL语句完成以下操作(1)找出所有学生的学号和姓名。解:SELECT Sno, S
8、name FROM S;(2)计算全体学生的出生年份。解:SELECT Sname, 2012-Sage FROM S;(3)查询选修了课程的学生的学号,并去掉结果表中重复的行。解:SELECT DISTINCT Sno FROM SC;(4)查询考试成绩在60-70之间的学生的学号及姓名。解:SELECT Sno,Sname FROM S,SC WHERE S.Sno = SC.Sno AND grade BETWEEN 60 AND 70;(5)查询学生姓“李”且全名为2个汉字的学生的姓名及学号。解:SELECT Sname,Sno FROM S WHERE Sname LIKE 李_ _
9、(6)查询选修了1号课程的学生的平均成绩。解:SELECT AVG(Grade) FROM SC WHERE Cno=1;(7)查询各个课程号及相应的选修人数。解:SELECT Cno ,COUNT(Sno) FROM SC GROUP BY Cno;(8)查询其他系中比计算机系所有学生年龄都小的学生姓名及年龄。解:SELECT Sname,age FROM S WHERE age ALL(SELECT age FROM S WHERE dept=计算机)AND dept 计算机;(9)将计算机系所有学生的年龄增加1岁。解:UPDATE S SET Sage=Sage+1WHERE dept=
10、计算机;(10)删除计算机系所有学生的选课记录。解:DELETE FROM SC WHERE 计算机=(SELECT dept FROM S WHERE S.Sno = SC.Sno);(11)根据学生的学号创建索引。解:CREATE UNIQUE INDEX sutno ON S(Sno);(12)将记录(1,数据库,4)插入课程表中。解:INSERT INTO C VALUES( 1,数据库,4);(13)建立选修了1号课程且成绩在80分以上的学生的视图(包括学号,姓名,成绩)。解:CREATE VIEW V_S1ASSELECT S.Sno, Sname, Grade FROM SC,S
11、WHERE Cno=1 ANDS.Sno = SC.Sno ANDGrade =80;8. 在什么情况下需要使用嵌入式SQL?解:SQL语言是面向集合的描述性语言,本身不具有过程性结构。大多数语句都独立执行,与上下文无关。但是绝大多数的数据库应用都是过程性的,要求根据不同的情况执行不同的任务,因此单纯的SQL语言很难实现这样的应用。需要将SQL语句嵌入到主语言源程序中使用,利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。因此,在开发数据库应用系统时,我们需要使用嵌入式SQL。9. 在嵌入式SQL中如何实现数据库和主语句程序间的信息传递?解:首先用SQL通信区(SQL Commu
12、nication Area,简称SQLCA)向主语句程序传递SQL语句的执行状态信息,使主语言能够据此控制程序流程。在程序运行中,主语句程序使用使用主变量向SQL语句提供参数。将SQL语句查询数据库的结果交主语句程序进一步处理,使用主变量和游标(cursor)向主语句程序输出数据。10. 什么是动态SQL?动态SQL有几种形式?解:动态SQL语句就是不能在编译时确定需要的SQL语句和查询条件,而是在程序运行时才能提供,即程序在执行过程中临时“组装”SQL语句,然后将SQL语句传给DBMS执行。动态SQL只有在执行时才产生执行计划。动态SQL包括动态组装SQL语句和动态参数两种形式。动态组装SQL语句:一个完整的SQL以字符串形式赋予主变量,然后使用立即执行语句执行主变量中的SQL语句。动态参数:态参数使用参数符号(?),表示该位置的数据在运行时设定。动态参数与主变量的不同之处在于,主变量是在编译时绑定的,而动态参数是在运行时绑定的。