最新数据库习题答案--何玉洁
数据库课后部分习题答案(何玉洁版)

P55习题10.CREATE TABLE [Book]([bno] [nchar](6)CONSTRAINT [PK_Book] PRIMARY KEY,[bname] [nvarchar](50)NOT NULL,[author] [char](10)NOT NULL,[date] [smalldatetime],[price] [decimal](5, 1),)CREATE TABLE [Bookshop]([bsno] [nchar](6)CONSTRAINT [PK_Bookshop] PRIMARY KEY,[bsname] [nvarchar](50)NOT NULL,[tel] [char](8) CONSTRAINT [CK_Bookshop_tel]CHECK([tel] like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'), [addr] [nvarchar](40),[zip] [char](6),)CREATE TABLE [Booksale]([bno] [nchar](6)NOT NULL,[bsno] [nchar](6)NOT NULL,[date] [smalldatetime] NOT NULL,[amount] [tinyint] CONSTRAINT [CK_Booksale_amount]CHECK([amount]>=1),CONSTRAINT [PK_Booksale] PRIMARY KEY([bno],[bsno],[date]),CONSTRAINT [FK_Booksale_Book] FOREIGN KEY([bno])REFERENCES [Book] ([bno]),CONSTRAINT [FK_Booksale_Bookshop] FOREIGN KEY([bsno]) REFERENCES [Bookshop] ([bsno]),)11. ALTER TABLE Book ADD amount INT CONSTRAINT CK_Book_amountCHECK(amount>=100)12. ALTER TABLE Bookshop DROP COLUMN zip13.ALTER TABLE Booksale ALTER COLUMN amount INTP89习题1.SELECT*FROM SC2.SELECT sname,sage FROM Student3.SELECT*FROM SC WHERE Grade BETWEEN 70 AND 804.SELECT sname,sage FROM Student WHERE sdept='计算机系'AND sage BETWEEN 18AND 205.SELECT MAX(grade)FROM SC WHERE CNO='c01'6.SELECT MAX(sage),MIN(sage)FROM Student WHERE sdept='计算机系'7.SELECT sdept,COUNT(*)FROM Student GROUP BY sdept8.SELECT cno,COUNT(*),MAX(grade)FROM SC GROUP BY cno9.SELECT sno,COUNT(*),SUM(grade)FROM SC GROUP BY sno ORDER BY COUNT(*)10.SELECT sno,SUM(grade)FROM SC GROUP BY sno HAVING SUM(grade)>20011.SELECT sname,sdept FROM Student JOIN SC ON Student.sno=SC.sno WHERE CNO='c01'或:SELECT sname,sdept FROM Student WHERE sno IN(SELECT sno FROM SC WHERE cno='c01')12.SELECT sname,cno,grade FROM Student JOIN SC ON Student.sno=SC.sno WHEREgrade>80 ORDER BY grade DESC13.SELECT Student.sno,sname,sdept FROM Student LEFT JOIN SC ON Student.sno=SC.snoWHERE SC.sno is NULL或:SELECT Student.sno,sname,sdept FROM Student WHERE NOT EXISTS(SELECT*FROM SC WHERE Student.sno=SC.sno )14.SELECT cname,semester FROM Course WHERE semester=(SELECT semester FROMCourse WHERE cname='VB')或:SELECT ame,C2.semester FROM Course C1 JOIN Course C2 ONC1.semester=C2.semester WHERE ame='VB'15.SELECT sname,sdept,sage FROM Student WHERE sage IN(SELECT sage FROM CourseWHERE sname='李勇')16.SELECT TOP 2 sname,sage FROM Student WHERE sdept='计算机系'ORDER BY Sage17.SELECT TOP 2 WITH TIES sname,sdept,grade FROM Student JOIN SC ONStudent.sno=SC.sno JOIN Course ON o=o WHERE cname='VB'ORDER BY grade DESC18.SELECT TOP 2 WITH TIES sno,COUNT(*)FROM SC GROUP BY sno ORDER BYCOUNT(*)DESC19.SELECT TOP1 WITH TIES sdept,COUNT(*)FROM Student GROUP BY sdept ORDERBY COUNT(*)DESC20.子查询1)SELECT sname,sdept FROM Student WHERE sno IN (SELECT sno FROM SCWHERE cno='c01')2)SELECT Student.sno,sname,cno,grade FROM Student JOIN SC ON Student.sno=SC.snoWHERE Student.sno IN(SELECT sno FROM Student WHERE sdept='数学系')AND grade>80或:SELECT Student.sno,sname,cno,grade FROM Student JOIN SC ON Student.sno=SC.snoWHERE sdept='数学系'AND grade>80错误:SELECT Student.sno,sname,cno,grade FROM Student JOIN SC ON Student.sno=SC.snoWHERE sdept='数学系'AND Student.sno IN(SELECT sno FROM SC WHEREgrade>80)或:SELECT Student.sno,sname,cno,grade FROM Student JOIN SC ON Student.sno=SC.snoWHERE Student.sno IN(SELECT sno FROM Student WHERE sdept='数学系')ANDStudent.sno IN(SELECT sno FROM SC WHERE grade>80)3)SELECT sname FROM Student WHERE sno IN(SELECT sno FROM SC WHEREgrade=(SELECT MAX(grade)FROM SC WHERE sno IN(SELECT sno FROM StudentWHERE sdept='计算机系')))4)SELECT sname,sdept,ssex,grade FROM Student JOIN SC ON Student.sno=SC.snoWHERE cno IN(SELECT cno FROM Course WHERE cname='计算机文化学') ANDgrade=(SELECT MAX(grade)FROM SC WHERE cno IN(SELECT cno FROM CourseWHERE cname='计算机文化学'))21.SELECT sname,sdept FROM Student WHERE sno NOT IN(SELECT sno FROM SCWHERE cno=(SELECT cno FROM Course WHERE cname='VB'))或:SELECT sname,sdept FROM Student WHERE NOT EXISTS(SELECT*FROM SC WHERE Student.sno=sno AND cno=(SELECT cno FROM Course WHERE cname='VB'))22.SELECT sname,ssex FROM Student WHERE NOT EXISTS(SELECT*FROM SCWHERE sno=Student.sno)或:SELECT sname,ssex FROM Student LEFT JOIN SC ON Student.sno=SC.sno WHERE cno IS NULL23.SELECT sname,cname FROM Student JOIN SC ON Student.sno=SC.sno JOIN Course ONo=o WHERE Student.sno IN(SELECT TOP 1 WITH TIES Student.sno FROM Student JOIN SC ON Student.sno=SC.sno WHERE sdept='计算机系'GROUP BY Student.sno ORDER BY AVG(grade))24.SELECT cname,semester,credit FROM Course WHERE cno IN(SELECT TOP 1 WITH TIEScno FROM SC WHERE cno IN(SELECT cno FROM Course WHERE semester BETWEEN 1 AND 5)GROUP BY cno ORDER BY COUNT(sno))错误:SELECT cname,semester,credit FROM Course WHERE semester BETWEEN 1 AND 5 AND cno IN(SELECT TOP 1 WITH TIES cno FROM SC GROUP BY cno ORDER BY COUNT(sno))25.CREATE TABLE test_t(COL1 int,COL2 char(10)NOT NULL,COL3 char(10),)INSERT test_t VALUES(NULL,'B1',NULL)INSERT test_t VALUES(1,'B2','C2')INSERT test_t(COL1,COL2)VALUES(2,'B3')26.DELETE FROM SC WHERE grade<5027.DELETE FROM Course WHERE NOT EXISTS(SELECT*FROM SC WHEREo=cno )或:DELETE Course FROM Course LEFT JOIN SC ON o=o WHERE o IS NULL28.DELETE SC FROM Student JOIN SC ON Student.sno=SC.sno JOIN Course ONo=o WHERE sdept='计算机系'AND cname='VB'AND grade<60或:DELETE SC WHERE sno IN(SELECT sno FROM Student WHERE sdept='计算机系')AND cno IN(SELECT cno FROM Course WHERE cname='VB')AND grade<6029.DELETE SC WHERE cno IN(SELECT cno FROM Course WHERE cname='VB')ANDgrade=(SELECT MIN(grade)FROM SC WHERE cno IN(SELECT cno FROM Course WHERE cname='VB'))或:DELETE SC WHERE cno IN(SELECT cno FROM Course WHERE cname='VB')AND sno IN(SELECT TOP 1 WITH TIES sno FROM Course JOIN SC ON o=oWHERE cname='VB'ORDER BY grade)30.UPDATE Course SET credit=credit+2 WHERE semester=231.UPDATE Course SET credit=3 WHERE cname='VB'32.UPDATE Student SET sage=sage+1 WHERE sdept='计算机系'33.UPDATE SC SET grade=grade+5 FROM Student JOIN SC ON Student.sno=SC.sno JOINCourse ON o=o WHERE sdept='信息系'AND cname='计算机文化学'或:UPDATE SC SET grade=grade+5 WHERE sno IN(SELECT sno FROM Student WHERE sdept='信息系')AND cno IN(SELECT cno FROM Course WHERE cname='计算机文化学') 34.UPDATE Course SET credit=credit-1WHERE cno IN(SELECT TOP 1 WITH TIESo FROM Course LEFT JOIN SC ON o=o GROUP BY o ORDER BY COUNT(sno))错误:UPDATE Course SET credit=credit-1 WHERE cno IN(SELECT TOP 1 WITH TIES cnoFROM SC GROUP BY cno ORDER BY COUNT(sno))。
何玉洁《数据库原理与应用教程》教案

何玉洁《数据库原理与应用教程》教案示例文章篇一:《我和数据库原理的奇妙之旅》嗨,大家好!我是一名小学生,今天我想给大家讲讲我和一本超级特别的书——《数据库原理与应用教程》之间发生的奇妙故事。
你可能会想,一个小学生怎么会和这么高深的书有关系呢?嘿嘿,这可就说来话长啦。
我有一个特别厉害的姐姐,她上大学了。
有一天,我在她的书桌上看到了这本《数据库原理与应用教程》。
当时我就想,这是个啥呀?书的封面看起来就很神秘,上面有好多我看不懂的字和奇怪的图案。
我就好奇地拿起来翻开看了看。
哇塞,里面全是密密麻麻的字,就像一群小蚂蚁在排队一样。
我看了几行,啥都不明白,感觉就像是在听外星人讲话。
我拿着书跑去问姐姐:“姐姐,这书讲的啥呀?我怎么都看不懂呢?”姐姐笑着说:“小笨蛋,这是关于数据库原理的书,你还小,当然不懂啦。
”我不服气地说:“哼,我虽然小,可我很聪明的。
你给我讲讲呗。
”姐姐就开始给我简单地讲数据库就像是一个超级大的仓库,不过这个仓库不是放东西的,是放数据的,就像我们把玩具放在玩具箱里一样,数据也有自己的“小房子”。
我似懂非懂地点点头,心想这还挺有趣的呢。
从那以后,我就对这本书着了迷。
我总是偷偷地跑到姐姐的房间去看这本书。
有时候我看到那些奇怪的符号和代码,就会自己在心里琢磨。
我想,这会不会是一种特别的语言呢?就像我们说的汉语、英语一样,只不过是电脑能听懂的语言。
我还会自己瞎编一些代码,然后跑去跟姐姐说:“姐姐,你看我写的这个代码对不对呀?”姐姐看了就会哈哈大笑起来,说:“你这写的啥呀,完全不对呢。
”我就会很沮丧,感觉自己像个失败的小发明家。
有一次,我在看关于数据库关系的部分。
我就想啊,这关系不就像我们人和人之间的关系一样吗?比如说我和我的小伙伴们,我们之间有好朋友关系、同学关系。
那在数据库里,数据之间也有各种各样的关系。
我就兴奋地跑去跟姐姐分享我的这个想法。
姐姐很惊讶地说:“哇,你这个想法还挺有趣的呢。
”这时候我就像得到了全世界最大的表扬一样,心里美滋滋的。
何玉洁新版《数据库原理与应用》-第1章数据库概述

难以满足不同对数据用户的需求
• 不同的用户关注的数据往往不同。 • 例如,对于学生基本信息,
• 分配学生宿舍的部门可能只关心学生 的学号、姓名、性别和班号。 • 教务部门可能关心的是学号、姓名、 所在系、专业和班号。
• 需要为每个用户建立一个文件,这势 必造成很多的数据冗余。
• 增加信息 • 删除无用信息等
• 不影响应用程序的特性。
学生数据库 学生数据库
应用程序
2013年7月14日7时43分
36
示例
应用程序 学号 S01 S02 S03 S04 姓名 张三 李四 王五 陈六 性别 男 女 女 男
学号 S01 S02 S03 S04
姓名 张三 李四 王五 陈六
性别 男 女 女 男
编写应用程序不方便
• 应用程序编写者必须清楚地了解所 用文件的逻辑及物理结构,
• 如文件中包含多少个字段, • 每个字段的数据类型, • 采用何种逻辑结构和物理存储结构。
• 对文件的查询、修改等处理都必须 在应用程序中编程实现。
2013年7月14日7时43分 17
数据冗余不可避免
• 数据冗余所带来的问题不仅仅是存储 空间的浪费,更为严重的是造成了数 据的不一致(inconsistency)。 • 如:某学生所学的专业发生了变化, 如果只在F1文件中进行修改,而忘记 在F3中应做同样的修改。则会造成同 一名学生在两个文件中的“专业”不 一样。
D B M S
2013年7月14日7时43分
28
数据具有较高的独立性
• 数据独立性是指数据的组织和存储方 法与应用程序互不依赖、彼此独立的 特性。
2013年7月14日7时43分
数据库原理与应用 何玉洁编著 上机报告2

学号: 201211041026 姓名:刘畅班级:信息12-1 成绩:上机练习一、实验目的了解SQL Sever 2012 安全管理机制,掌握SQL Sever2012 身份验证模式的创建,以及创建和删除数据库用户。
二、实验环境安装SQL Sever 2012 的计算机一台,且所在计算机用户能完整获取计算机最高权限。
三、实验内容1用SSMS工具建立SQL Sever身份验证模式的登录名:log1、log2和log3。
2利用第10章建立的students数据库以及Students、Course、SC表,用log1建立一个数据库引擎查询,在“可用数据库”下拉列表框中是否能看到并选中students数据库?为什么?3将log1、log2和log3映射为students数据库中的用户,用户名同登录名。
4再次用log1建立一个新的数据库引擎查询,这次在“可用数据库”下拉列表框中是否能看到并选中students数据库?为什么?5用log1用户在students数据库中执行下述语句,能否成功?为什么?SELECT * FROM Course6授予log1具有对Course表的查询权限,授予log2具有对Course表的插入权限。
7在SSMS中,用log2建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么? INSERT INTO Course VALUES(‘C101’ ,’数据库基础’,4,5)再执行下述语句,能否成功?为什么?SELECT * FROM Course8在SSMS中,在log1建立的数据库引擎查询中,再次执行下述语句:SELECT * FROM Course这次能否成功?但如果执行下述语句:INSERT INTO Course VALUES(‘C103’,’软件工程',4,5)能否成功?为什么?9授予log3在students数据库中具有建表权限。
10在students数据库中建立用户定义的角色:SelectRole,并授予该角色对Students、Course和SC表具有查询权。
数据库原理及应用(何玉洁)-第9章

17
“保存查询”对话框 保存查询” 保存查询
18
2000基础 第9章 SQL Server 2000基础
1
9.1 SQL Server 2000概述 概述
2000共提供了四个服务 共提供了四个服务: SQL Server 2000共提供了四个服务: 1、SQL Server 2000的最核心的服务 的最核心的服务。 是SQL Server 2000的最核心的服务。 2、SQL Server Agent 能够根据系统管理员预先设定好的计划自动执行相 应的功能。 应的功能。 Coordinator(DTC) 3、Distributed Transaction Coordinator(DTC) 分布式事务处理协调器是一个事务管理器 是一个事务管理器, 分布式事务处理协调器是一个事务管理器,在DTC 支持下, 支持下,客户可以在一个事务中访问不同服务器上的数 据库。 据库。 4、Microsoft Search 能够对字符数据进行检索。
7
8
2、查询分析器
SQL查询分析器( Analyaer) SQL查询分析器(Query Analyaer)是一个 查询分析器 图形化的查询工具, 图形化的查询工具,用于以文本的方式编辑 Transact-SQL语句,然后发送给服务器, Transact-SQL语句,然后发送给服务器,并接 语句 受执行的结果。使用这个工具, 受执行的结果。使用这个工具,用户可以交互 地设计和测试Transact-SQL语句、 地设计和测试Transact-SQL语句、批处理和脚 Transact 语句 本。
5
图9-19 连接成功后的企业管理器
6
Server数据库 SQL Server数据库 Master数据库 Master数据库 是一个非常重要的数据库, 是一个非常重要的数据库,记录了一些关于 Server系统相关信息 系统相关信息。 SQL Server系统相关信息。 注意:千万不要在master master数据库中创建用户 注意:千万不要在master数据库中创建用户 的对象 Model数据库 Model数据库 可用来作为创建系统中的所有数据库模板。 可用来作为创建系统中的所有数据库模板。 Msdb数据库 Msdb数据库 用来处理有关SQL Server代理程序内的警 用来处理有关SQL Server代理程序内的警 操作员及作业等工作, 告、操作员及作业等工作,例如当警告发生时通 知哪个操作员等相关记录。 知哪个操作员等相关记录。 Tempdb数据库 Tempdb数据库 包含所有的暂存表格与暂存存储过程。 包含所有的暂存表格与暂存存储过程。
数据库系统教程(何玉洁_李宝安_编著)第5章习题参考答案

第5章数据操作语句习题答案1.查询SC表中的全部数据select * from SC2.查询计算机系学生的姓名和年龄select Sname,Sage from Studentwhere Sdept = '计算机系'3.查询成绩在70~80分的学生的学号、课程号和成绩select Sno,Cno,Grade from SCwhere Grade between 70 and 804.查询计算机系年龄在18~20岁的男学生的姓名和年龄select Sname,Sage from Studentwhere Sdept = '计算机系' and Sage between 18 and 205.查询C001课程的最高分select max(Grade) from SCwhere Cno = 'C001'6.查询计算机系学生的最大年龄和最小年龄select max(Sage),min(Sage) from Studentwhere Sdept = '计算机系'7.统计每个系的学生人数select Sdept,count(*) from Studentgroup by Sdept8.统计每门课程的选课人数和考试最高分select Cno,count(*),max(Grade) from SCgroup by Cno9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果select sno,count(*),sum(Grade) from SCgroup by Snoorder by count(*)10.查询选修C002课程的学生的姓名和所在系select Sname,Sdept from Student S join SCon S.Sno = SC.Snowhere Cno = 'C002'11.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果select Sname,Cno,Grade from Student S join SCon S.Sno = SC.Snowhere Grade > 80order by Grade DESC12.查询选课门数最多的前2位学生,列出学号和选课门数select top 2 with ties Sno,count(*) from SCgroup by Snoorder by count(*) desc13.查询哪些课程没有学生选修,要求列出课程号和课程名select o,Cname from Course C left join SCon o = owhere o is null14.查询计算机系哪些学生没有选课,列出学生姓名select Sname from Student S left join SCon S.Sno=SC.Snowhere Cno is null15.用子查询实现如下查询:1)查询选修C001课程的学生的姓名和所在系select Sname,Sdept from Studentwhere Sno in (select Sno from SCwhere Cno = 'C001')2)查询通信工程系成绩80分以上的学生的学号和姓名select Sno,Sname from Studentwhere Sno in (select Sno from SCwhere Grade >80)3)查询计算机系考试成绩最高的学生的姓名select Sname from Studentwhere Sdept = '计算机系' and Sno in (select top 1 with ties Sno from SCorder by Grade desc)4)查询年龄最大的男学生的姓名和年龄select Sname,Sage from Studentwhere Ssex = '男' and Sno in(select top 1 with ties Sno from Studentorder by Sage desc)5)查询C001课程的考试成绩高于该课程平均成绩的学生的学号和成绩select Sno,Grade from SCwhere Cno = 'C001' and Grade > (select avg(Grade) from SCwhere Cno = 'C001')16.创建一个新表,表名为test,其结构为(COL1,COL2,COL3),其中:COL1:整形,允许空值COL2:普通编码定长字符类型,长度为10,不允许空值COL3:普通编码定长字符类型,长度为10,允许空值create table test(COL1 int,COL2 char(10) not null,COL3 char(10))insert into test values(NULL,'B1',NUll)insert into test values('1','B2','C2')insert into test values('2','B3',NUll)17.将所有选修C001课程的学生成绩加10分update SC set Grade = Grade +10where Cno = 'C001'18.将计算机系所有选修“计算机文化学”课程的学生的成绩加10分update SC set Grade = Grade +10where Cno in (select Cno from Coursewhere Cname = '计算机文化学')19.删除成绩小于50分的学生的选课记录delete from SCwhere Grade < 5020.删除计算机系VB考试成绩不及格学生的VB选课记录delete from SCwhere Cno= 'C005' and Grade < 60 and Sno in (select Sno from Studentwhere Sdept = '计算机系')21.删除没人选的课程的基本信息delete from Coursewhere Cno in(select o from Course C left join SCon o=owhere o is null)*以上内容仅供参考。
(完整word版)数据库原理与应用教程 何玉洁 五——八章课后习题部分答案

第五章一、试说明使用视图的好处。
答:1、简化数据查询语句2、使用户能从多角度看待同一数据3、提高了数据的安全性4、提供了一定程度的逻辑独立性二、使用视图可以加快数据的查询速度,这句话对吗?为什么?答:不对。
因为数据库管理系统在对视图进行查询时,首先检查要查询的视图是否存在,如果存在,则从数据字典中提取视图的定义,把视图的定义语句对视图语句结合起来,转换成等价的对基本表的查询,然后再执行转换后的查询,所以使用视图不可以加快数据的查询速度。
三、利用第3章建立的Student、Course和SC表,写出创建满足下述要求的视图的SQL语句。
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
答:CREATE VIEW IS_S_CASSELECT Sno,Sname,Sdept,Cno,Cname,CreditFROM Student S JOIN SC ON S.Sno=SC.SnoJOIN Course C ON o=o四、利用第三题建立的视图,完成如下查询:(1)查询考试成绩大于等于90分的学生的姓名、课程号和成绩。
答:SELECT Sname,Cno,GradeFROM IS_SCWHERE Grade>=90五、修改第三题(4)定义的视图,使其查询每个学生的学号,总学分以及总的选课门数。
答:ALTER VIEW IS_CCASSELECT Sno,COUNT(Credit),COUNT(Cno)FROM SC JOIN Course C ON o=oGROUP BY Sno第六章一、关系规范化中的操作异常有哪些?它是由什么引起的?解决的方法是什么?答:操作异常:数据冗余问题、数据更新问题、数据插入问题和数据删除问题。
它是由关系模式中某些属性之间存在的“不良”的函数依赖关系一起的。
解决的方法是进行模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式。
数据库原理及应用(何玉洁)第二版第4章

SELECT Sname, Ssex FROM Student WHERE Sdept = '信息系' OR Sdept = '数学系' OR Sdept = '计算机系'
15
(4)字符匹配 LIKE用于查找指定列名与匹配串常量匹配的
元组。通配符用于表示任意的字符或字符串。在 LIKE运算符前边也可以使用NOT运算符,表示对 结果取反。
SELECT MAX(Grade) , MIN(Grade) FROM SC WHERE Cno='C01'
注意:计算函数不能出现在WHERE子句中。 例:查询年龄最大的学生的姓名,如下写法是 错误的:
SELECT Sname FROM Student WHERE Sage = MAX(Sage)
25
LIKE运算符的一般形式为: 列名 [NOT] LIKE <匹配串>
匹配串中可包含如下四种通配符: _:匹配任意一个字符; %:匹配0个或多个字符; [ ]:匹配[ ]中的任意一个字符; [^ ]:不匹配[ ]中的任意一个字符。
16
例.查询姓‘张’的学生的详细信息。
SELECT * FROM Student WHERE Sname LIKE '张%'
课程号 选课人数
c01
3
C02
4
c04
2
c05
3
c06
2
27
使用HAVING
HAVING子句用于对分组后的结果再进行过滤, 它的功能有点像WHERE子句,但它用于组而不是对 单个记录。在HAVING子句中可以使用计算函数,但 在WHERE子句中则不能。HAVING通常与GROUP BY子 句一起使用。 例.查询修了3门以上课程的学生的学号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分基础理论第1章数据库概述1.试说明数据、数据库、数据库管理系统和数据库系统的概念。
数据:描述事务的符号记录数据库:存储数据的仓库数据库管理系统:用于管理和维护数据的系统软件数据库系统:计算机中引入数据库后的系统,包括数据库,数据库管理系统,应用程序,数据库管理员2.数据管理技术的发展主要经历了哪几个阶段?两个阶段,文件管理和数据库管理3.数据独立性指的是什么?应用程序不因数据的物理表示方式和访问技术改变而改变,分为逻辑独立性和物理独立性。
物理独立性是指当数据的存储结构或存储位置发生变化时,不影响应用程序的特性;逻辑独立性是指当表达现实世界的信息内容发生变化时,不影响应用程序的特性。
4.数据库系统由哪几部分组成?由数据库、数据库管理系统、应用程序、数据库管理员组成。
第2章数据模型与数据库系统的结构1.说明实体一联系模型中的实体、属性和联系的概念。
实体是具有公共性质的并可相互区分的现实世界对象的集合。
属性是实体所具有的特征或性质。
联系是实体之间的关联关系。
2.数据库系统包含哪三级模式?试分别说明每一级模式的作用。
外模式、模式和内模式。
外模式:是对现实系统中用户感兴趣的整体数据结构的局部描述,用于满足不同用户对数据的需求,保证数据安全。
模式:是数据库中全体数据的逻辑结构和特征的描述,它满足所有用户对数据的需求。
内模式:是对整个数据库的底层表示,它描述了数据的存储结构。
3.数据库管理系统提供的两级映像的作用是什么?它带来了哪些功能?两级映像是外模式/模式映像和模式/内模式映像。
外模式/模式映像保证了当模式发生变化时可以保证外模式不变,从而使用户的应用程序不需要修改,保证了程序与数据的逻辑独立性。
模式/内模式映像保证了当内模式发生变化,比如存储位置或存储文件名改变,可以保持模式不变,保证了程序与数据的物理独立性。
两级印象保证了应用程序的稳定性。
第3章关系数据库1.试述关系模型的三个组成部分。
数据结构、关系操作集合、关系完整性约束2.解释下列术语的含义:(1)主码当一个关系有多个候选码时,选择一个作为主码(2)候选码当一个属性或属性集的值能够唯一标识一个关系的元组,而又不包含多余的元素,则称该属性或属性集为候选码。
(3)外码设F是关系R的一个或一组属性,但不是关系R的主码,如果F与关系S的主码相对应,则称F是关系R的外码。
(4)关系(5)关系模式二维表的结构3.关系数据库的三个完整性约束是什么?各是什么含义?实体完整性:关系数据库中每个关系都必须有主码,且主码值不能为空,不能重复。
参照完整性:指多个实体或表之间的关联关系,规则是外码或者值为空,或者等于所参照关系的主码值。
用户定义完整性:指明关系中属性的取值范围。
4.连接运算有哪些?等值连接和自然连接的区别是什么?等值连接,自然连接区别:1.自然连接要求相等的分量必须有相同的属性名,等值连接不要求2.自然连接要求把重复的属性名去掉,等值连接不要求。
第4章SQL语言基础及数据定义功能1.数据完整性的含义是什么?指数据的正确性和相容性。
2.写出创建如下表的SQL语句,要求在定义表的同时定义数据的完整性约束:(1)“图书表”结构如下:书号:统一字符编码定长类型,长度为6,主码;书名:统一字符编码可变长类型,长度为30,非空;第一作者:普通编码定长字符类型,长度为10,非空;出版日期:小日期时间型,价格:定点小数,小数部分1位,整数部分3位。
Create table book(bno nchar(6) primary key,bname nvarchar(30) not null,fauther char(10) not null,date smalldatetime,price numeric(4,1))第5章数据操作语句利用定义的Student、Course和SC表结构实现如下操作,并根据表提供的数据观察各语句执行情况。
Student表:Course表SC表:1.查询学生选课表中的全部数据。
Select * from student2.查询计算机系学生的姓名、年龄。
Select sname , sage from student where sdept =’计算机系’3.查询成绩在70~80的学生的学号、课程号和成绩。
Select sno, cno, grade from sc where grade between 70 and 804.计算机系年龄在18~20的男生的姓名、年龄。
Select sname, sage from student where sdept=’计算机系’and sagebetween 18 and 20 and ssex=’男’5.查询“c01”课程的最高成绩。
Select max(grade) from sc where cno=’c01’6.查询计算机系学生的最大年龄和最小年龄。
select max(sage), min(sage) from s where sdept=’计算机系’7.统计每个系的学生人数。
select sdept, count(*) from s group by sdept8.统计每门课程的选课人数和考试最高分。
Select cno, count(sno), max(grade) from sc group by cno9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
Select sno, count(cno) 选课门数, sum(grade) 考试总成绩from s group by snoorder by 选课门数asc10.查询总成绩超过200分的学生,要求列出学号、总成绩。
Select sno, sum(grade) from sc group by sno having sum(grade)>200 11.查询选修了“c02”课程的学生的姓名和所在系。
Select s.sname, sdept from student s join sc on s.sno=sc.sno12.查询成绩80分以上的学生的姓名、选的课程号和成绩,并按成绩降序排列结果。
Select sname, cno, grade from student s join sc on s.sno=sc.sno where grade >80 order by grade desc13.查询哪些学生没有选课,要求列出学号、姓名和所在系。
Select sno, sname, sdept from s join sc on s.sno=sc.sno where cno is null 14.查询与VB在同一学期开设的课程的课程名和开课学期。
Select ame, c2.credit from course c1 join course c2 on c1.credit=c2.credit where ame=’VB’ and ame != ’VB’15.查询与李勇年龄相同的学生的姓名、所在系和年龄。
Select s2.sname, s2.sdept, s2.sage from student s1 join student s2 on s1.sage=s2.sage where s1.sname = ’李勇’ and s2.sname != ‘李勇’16.查询计算机系年龄最小的2名学生的姓名和年龄。
Select top 2 with ties sname, sage from s where sdept = ‘计算机系’order by sage asc17.查询VB考试成绩最高的前2名学生的姓名、所在系和VB成绩,包括并列的情况。
18.查询选课门数最多的前2名学生的学号和选课门数,包括并列的情况。
19.查询学生人数最多的系,列出系名和人数。
20.用子查询实现如下查询:(l)查询选修了“c01”课程的学生姓名和所在系。
Select sname,sdept from studentWhere sno in (select sno from s c where cno = ‘C01’)(2)查询数学系成绩80分以上的学生的学号、姓名、选的课程号和成绩。
Select sno,sname,cno,grade from student join sc on s.sno=sc.sno Where sdept =‘数学系’and sno in (Select sno from sc where grade > 80)(3)查询计算机系考试成绩最高的孛学生的姓名。
Select sname from student s join sc on s.sno = sc.snoWhere sdept = ‘计算机系’and grade = (Select max(grade) from sc join student s on s.sno=sc.snoWhere sdept = ‘计算机系’)21.创建一个新表,表名为test_t,其结构为(COLI,COL2,COL3),其中:COL1:整型,允许空值。
COL2:字符型,长度为10,不允许空值。
COL3:字符型,长度为10,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
Create table test_t(COL1 int,COL2 char(10) not null,COL3 char(10))Insert into test_t(COL2) values(’B1’)Insert into test_t(COL1,COL2) values(1,’B2’)Insert into test_t values(2,’B3’,NULL)22.删除考试成绩低于50分的学生的该门课程的选课记录。
Delete from sc where grade < 5022.删除没有人选的课程记录。
Delete from course where cno not in(Select cno from course)23.删除计算机系VB成绩不及格学生的VB选课记录。
Delete from scFrom sc join student s on s.sno = sc.snoJoin course c on o = owhere cname = ‘VB’ and grade < 60and sdept = ‘计算机系’24.删除VB考试成绩最低的学生的VB选课记录。
Delete from scFrom sc join student s on s.sno = sc.snoJoin course c on o = owhere cname = ‘VB’and grade = (select min(grade) from sc join student on sc.sno=s.snowhere cname = ‘VB’ )25.将第2学期开设的所有课程的学分增加2分。