1、关系数据库操作语言(一)及答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:18,分数:11.00)1.若要在 SQL Server中存储图像、Word 文档等文件,可采用的数据类型是_。Abigint Btext Cimage Dntext(分数:0.50)A.B.C.D.2.有教师表(教师号,姓名,职称,所在系)和授课表(教师号,课程号,授课学年,授课时数),同一门课程可由多名教师讲授,同一名教师也可讲授多门课程。查询从未被“教授”讲授过的课程的课程号,正确的语句是_ASELECT 课程号 FROM授课表 a JOIN教师表 b ON a.教师号=b.教师号WHERE职
2、称!=教授BSELECT 课程号 FROM授课表 a RIGHT OUTER JOIN教师表 bON a.教师号=b.教师号WHERE职称!=教授AND a.课程号 IS NOT NULLCSELECT 课程号 FROM授课表 WHERE课程号 NOTIN(SELECT课程号 FROM授课表 a JOIN教师表 b ON a.教师号=b.教师号WHERE职称教授)DSELECT 课程号 FROM授课表 WHERE课程号 IN(SELECT课程号 FROM授课表 a JOIN教师表 b ON a.教师号=b.教师号WHERE职称!=教授)(分数:0.50)A.B.C.D.3.若给出关系 Stud
3、ent(S_no,Shame,Sage,S_sex,SD_name,S_add,S_tel),并用 SQL语言定义Student关系如下:CREATE Student(S_no CHAR(6),Shame CHAR(30)NOT NULL,Sage CHAR(30),S_sex CHAR(1),SD_name CHAR(20),S_add CHAR(30),S_tel CHAR(20),PRTNARY KEY(S_no)以下哪条记录插入到 Student表能被正确地执行_。AINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_name,S_add,S_te
4、l)VALUES(010456,小芳,18,“,“,“,“)BINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_name,S_add,S_tel)VALUES(010456,小芳,18,女,计算机学院,北京,88661200)CINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_name,S_add,S_tel)VALUES(,小芳,18,F,计算机学院,北京,88661200)DINSERT INTO Student(S_no,Shame,Sage,S_sex,SD_name,S_add,S_tel)VALUES(
5、010456,118,F,计算机学院,北京,88661200)(分数:0.50)A.B.C.D.4.在 SQL Server中设计用户表时,固定长度的身份证号码最好采用下面哪种数据类型进行存储_。Atext Bvarchar Cint Dchar(分数:0.50)A.B.C.D.5.删除当前数据库中名为 Student的表,以下 SQL语句正确的是_。ADROP TABLE StudentBDELETE TABLE StudentCREMOVE TABLE StudentDCLEAR TABLE Student(分数:0.50)A.B.C.D.6.在创建关系表时,使用以下哪个关键字用来定义唯一
6、约束_。ANOTNULL BUNIQUE CCHECK DPRIMARYKEY(分数:0.50)A.B.C.D.7.有学生关系:学生(学号,姓名,年龄),对学生关系的查询语句如下:SELECT 学号 FROM 学生 WHERE 年龄20 AND 姓名 LIKE %海如果要提高该语句的查询效率,应该建立索引的属性是_。A学号 B姓名 C年龄 D(学号,姓名)(分数:0.50)A.B.C.D.8.给定供应关系 SPJ(供应商号,零件号,工程号,数量),查询至少用了 3家不同供应商(包含 3家)供应的零件的工程,输出其工程号,并按工程号降序排列,以下 SQL语句正确的是_。ASELECT 工程号 F
7、ROM SPJGROUP BY工程号HAVING COUNT(DISTINCT(供应商号)2ORDER BY工程号 DESCBSELECT 工程号 FROM SPJGROUP BY工程号 DESCWHERE COUNT(供应商号)2CSELECT 工程号 FROM SPJORDERBY 工程号HAVING COUNT供应商号)2DSELECT 工程号 FROM SPJORDERBY 工程号WriERE COUNT (DISTINCT(供应商号)2(分数:0.50)A.B.C.D.9.现有如下两个关系表:职工(职工号,姓名,性别,年龄,职务,基本工资,职务津贴)男职工(职工号,姓名,性别,年龄,
8、基本工资)要求将职工表中男职工的信息插入到男职工表中,以下 SQL语句正确的是_。AINSERT INTO 男职工(职工号,姓名,性别,年龄,基本工资)VALUESSELECT * FROM职工 WHERE 性别=男BINSET INTO 男职工SELECT * FROM 职工 WHERE 性别=男CINSERT INTO 男职工 AS(SELECT 职工号,姓名,性别,年龄,基本工资 FROM 职工 WHERE 性别=男DINSERT INTO 男职工SELECT 职工号,姓名,性别,年龄,基本工资 FROM 职工 WHERE 性别=男(分数:0.50)A.B.C.D.10.有会员卡表 Ta
9、bleCards(CardID,StartDate,Score),CardID 表示卡标识,Score 为卡积分,有视图定义:CREATE VIEW vCard ASSELECT * FROM TableCards WHERE Score BETWEEN 200 AND 500WITH CHECK 0PTI0N假设(C0001,2008/5/6,220)是 TableCards表中的一个元组,下述说法正确的是_。A若要查询积分在 200300 之间的所有卡标识,通过视图 vCard查询会比直接在 TableCards上查询效率要高B数据库系统会分配存储空间实际保存视图 vCard所对应的数据C
10、语句 UPDATE vCard SET Score=260 WHERE CardID=C0001能成功执行D语句 INSERT INTO vCard VALUES(zzC0010,2008/4/5,1000)能成功执行(分数:0.50)A.B.C.D.11.将职工表中职工号为 02312的职工的基本工资提高 20%,以下 SQL语句正确的是_。AUPDATE FROM 职工 VALUES基本工资=基本工资*1.2 WHERE 职工号=02312BUPDATE INTO 职工 SET基本工资=基本工资*1.2 WHERE 职工号=02312CUPDATE 职工 VALUES基本工资=基本工资*1
11、.2 WHERE 职工号=02312DUPDATE 职工 SET基本工资=基本工资*1.2 WHERE 职工号=02312(分数:0.50)A.B.C.D.12.以下哪项不是视图的作用_。A简化数据查询语句 B提高数据的安全性C提高查询效率 D使用户能从多角度看到同一数据(分数:0.50)A.B.C.D.13.已知关系表产品,现需要对其属性产品号增加一个检查约束,所有产品号必须以 P开头,后接 6个数字,则以下 SQL语句正确的是_。AALTERTABLE 产品 ADD COLUMN产品号约束CHECK(产品号 LIKE P0-90-90-90-90-90-9)BALTERTABLE 产品 A
12、LTERCOLUMN产品号约束CHECK(产品号 LIKE P0-90-90-90-90-90-9)CALTERTABLE 产品 ADD产品号约束CHECK(产品号 LIKE P0-90-90-90-90-90-9)DALTERTABLE 产品 ADD CONSTRAINT产品号约束CHECK(产品号 LIKE P0-90-90-90-90-90-9)(分数:0.50)A.B.C.D.14.某系统中,车牌号码字段长度为 7位,第 1位用一个字符表示一个省的简称,第 2位为A-Z之间的字母,第 37 位为A-Z之间的字母或0-9之间的数字,则最好采用以下哪种数据类型来存储车牌号码信息_。Aima
13、ge Btext Cchar Dvarchar(分数:0.50)A.B.C.D.15.在 SQL语言中,删除一个视图的命令是_。ADELETE BDROP CCLEAR DREMOVE(分数:0.50)A.B.C.D.设有供应商关系 S和零件关系 P如下表所示,它们的主码分别是“供应商号”和“零件号”,且零件关系P的属性“供应商号”是它的外码,属性“颜色”只能取值为“红”、“白”或“蓝”。供应商关系 S供应商号 供应商名 所在城市B01 红星 北京S10 宇宙 上海T20 黎明 天津Z01 立新 重庆零件关系 P零件号 颜色 供应商号010 红 B01201 蓝 T20312 白 $10(分数
14、:1.50)(1).下列哪个(些)行不能插入到关系 P中_。(201,白,S10)(101,蓝,S01)(301,绿,B01)A仅 B仅和 C仅 D都不能(分数:0.50)A.B.C.D.(2).关系 S中的下列行,哪个(些)可以被删除_。(S10,宇宙,上海)(Z01,立新,重庆)A仅 B仅 C都可以 D都不可以(分数:0.50)A.B.C.D.(3).下列哪个(些)更新操作可以执行_。UPDATE S SET 所在城市=广州WHERE 所在城市=北京UPDATE P SET 供应商号=B02WHEkE 供应商号=B01A仅 B仅 C都可以 D都不可以(分数:0.50)A.B.C.D.某企业
15、职工和部门的关系模式如下所示,其中部门负责人也是一个职工。职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)(分数:1.50)(1).查询每个部门中月工资最高的“职工号”,以下 SQL语句正确的是_。ASELECT 职工号 FROM 职工 AS E WHERE 月工资=(SELECTMAX(月工资)FROM 职工 AS MWHEREM.部门号=E.部门号)BSELECT MAX(月工资),职工号 FROM职工CSELECT 职工号 FROM职工 WHERE月工资 IN(SELECT MAX(月工资)FROM 职工)DSELECT 职工号 FRO
16、M职工 WHERE月工资=(SELECT MAX(月工资)FROM 职工 GROUP BY部门号)(分数:0.50)A.B.C.D.(2).查询比软件部所有职工月工资都要少的职工姓名及月工资,以下 SQL语句正确的是_。ASELECT 姓名,月工资 FROM职工 WHERE月工资ALL(SELECT MAX(月工资)FROM 职工 WHERE部门号=软件部)BSELECT 姓名,月工资 FROM职工 WHERE月工资(SELECT COUNT(月工资)FROM 职工 WHERE部门号=软件部)CSELECT 姓名,月工资 FROM职工 WHERE月工资(SELECT MAX(月工资)FROM
17、职工 WHERE部门号=软件部)DSELECT 姓名,月工资 FROM职工 WHERE月工资(SELECT MIN(月工资)FROM 职工 WHERE部门号=软件部)(分数:0.50)A.B.C.D.(3).查询比所在部门负责人月工资还要高的职工的姓名,以下 SQL语句正确的是_。ASELECT 姓名 FROM职工 WHERE月工资(SELECTE.月工资 FROM职工 AS E,部门 AS DWHERE E.职工号=D.负责人代码)BSELECTE1.姓名 FROM职工 ASE1,职工 ASE2,部门WHERE部门.负责人代码=E2.职工号 AND E1.职工号=E2.职工号AND E1.月
18、工资E2.月工资CSELECT E1.姓名 FROM职工 AS E1,职工 AS E2,部门WHERE E1.职工号=E2.职工号 AND E1.月工资E2.月工资DSELECT E1.姓名 FROM职工 AS E1 WHERE月工资(SELECT E1.月工资 FROM职工 AS E2,部门WHERE部门.负责人代码=E2.职工号 AND E1.月工资E2.月工资)(分数:0.50)A.B.C.D.16.修改学生表的表结构,增加一个新列,列名为“班级”,数据类型为 char,长度为 10,以下 SQL语句正确的是_。AALTERTABLE 课程 ADD COLUMN教师 CHAR(10)BA
19、LTERTABLE 课程 ADD教师 CHAR(10)CALTERTABLE 课程 INSERTCOLUMN教师 CHAR(10)DALTERTABLE 课程 ALTERCOLUMN教师 CHAR(10)(分数:0.50)A.B.C.D.二、设计与应用题(总题数:6,分数:45.00)17.定义一个视图,名为 sView,它包含了学生表中学号和姓名两列数据,且视图中的学生年龄都必须大于 20。(分数:3.00)_现有关系数据库如下:学生(学号,姓名,性别,年龄,籍贯,专业)课程(课程号,课程名,学分)选课(学号,课程号,成绩)用 SQL语言实现以下操作:(分数:20.00)(1).查询籍贯为湖
20、南的男生的姓名和年龄。(分数:1.00)_(2).查询年龄在 2022 岁之间的学生的全部信息,并按年龄降序排列。(分数:1.00)_(3).查询年龄小于 23岁,籍贯是湖南、湖北、广东或广西的学生的学号和姓名。(分数:1.00)_(4).查询学生表中籍贯为空值的学生的学号和姓名。(分数:1.00)_(5).查询学生表中姓刘的湖南学生的学号和姓名。(分数:1.00)_(6).查询学生张三选修的不及格(成绩小于 60分且不为空)课程门数。(分数:1.00)_(7).查询学生的最小年龄、最大年龄和平均年龄。(分数:1.00)_(8).查询年龄超过平均年龄的学生姓名。(分数:1.00)_(9).查询
21、各门课程的课程号和平均成绩,要求该课程选修学生人数至少超过 3人。(分数:1.00)_(10).查询没有选修任何课程的学生的学号和姓名。(分数:1.00)_(11).查询选修了课程名为“数据库原理”的所有学生的姓名。(分数:1.00)_(12).查询至少选修了两门课程的学生的学号。(分数:1.00)_(13).查询所有学生的选课情况,并且同时显示没有选修任何课程的学生信息。(分数:1.00)_(14).查询至少选修一门课程的所有学生信息。(分数:1.00)_(15).查询选修了课程表中所有课程的学生信息。(分数:1.00)_(16).查询出与学生“张三”至少有一门相同选修课程的所有学生信息。(
22、分数:1.00)_(17).查询每个学生的学号、姓名和所选课程的门数。(分数:1.00)_(18).查询选修课程门数超过一门的学生的信息。(分数:1.00)_(19).查询学生“张三”没有选修的课程的课程号。(分数:1.00)_(20).查询学生表中所有男生信息,并将查询结果保存在一个新表中,表名为男生信息。(分数:1.00)_某教学管理数据库中有如下 3个基本表。学生:S(S#,SNAME,AGE,SEX),属性分别表示学号、姓名、年龄和性别。学习:SC(S#,C#,GRADE),属性分别表示学号、课程号和成绩。课程:C(C#,CNAME,TEACHEK),属性分别表示课程号、课程名和教师姓
23、名。试用 SQL语句完成下列操作:(分数:16.00)(1).查询年龄大于 20岁的男学生的学号和姓名。(分数:1.00)_(2).查询选修课程名为“操作系统”课程的学生的平均年龄。(分数:1.00)_(3).查询教师“王明”所授课程的课程号和课程名。(分数:1.00)_(4).查询选修课程包含教师“王明”所授课程的学生学号。(分数:1.00)_(5).查询教师“王明”所授课程的每门课程的学生平均成绩。(分数:1.00)_(6).统计每门课程的学生选修人数(超过 10人的课程才统计),要求输出课程号和选修人数,查询结果按选修人数降序排列,若人数相同,则按课程号升序排列。(分数:1.00)_(7
24、).查询姓张的所有学生的姓名和年龄。(分数:1.00)_(8).查询成绩为空值的学生学号和课程号。(分数:1.00)_(9).查询年龄大于女学生平均年龄的男学生姓名和年龄。(分数:1.00)_(10).查询年龄大于所有女学生年龄的男学生姓名和年龄。(分数:1.00)_(11).查询选修课程门数超过学号为 S0001的学生选修门数的所有学生信息。(分数:1.00)_(12).查询每个学生的学号、选修课程门数(COUNT_C)和总成绩(TOTAL_G),将查询结果保存在一个名为RESULT的新表中。(分数:1.00)_(13).将 SC中尚无成绩的选课记录删除。(分数:1.00)_(14).将学生
25、“张三”的学习选课信息全部删去。(分数:1.00)_(15).将选修“操作系统”课程且不及格的成绩全改为空值。(分数:1.00)_(16).将低于总平均成绩的女学生成绩提高 10%。(分数:1.00)_18.使用 SQL语句创建学生选课表,有如下限制和描述。学号:与学生表中学号保持数据类型一致,非空。课程号:与课程表中课程号保持数据类型一致,非空。成绩:为 0100 之间的整数;该关系表主码为(学号,课程号):学号作为外码,参照关系学生表中的学号属性;课程号作为外码,参照关系课程表中的课程号属性。(分数:2.00)_19.有如下两个关系表:Emp(eid,ename,age,did,salar
26、y),其各列含义为职工号、姓名、年龄、部门号、工资。Dept(did,dname,mgr_id),其各列含义为部门号、部门名称、部门经理职工号。写出一条 SQL语句,查询工资大于 10000,且与他所在部门的经理年龄相同的职工姓名。(分数:2.00)_20.使用 SQL语句创建学生表,其中各列有如下限制。学号:普通编码定长字符型,第 1位为 S,第 26 位为0-9之间的数字,标识属性。姓名:普通编码定长字符型,长度为 6,非空且唯一。性别:普通编码定长字符型,长度为 2,非空,且只能取“男”或“女”两个值。出生日期:日期时间型,出生日期必须在 1989年 12月 31日之后。专业:普通编码定
27、长字符型,长度为 10,非空。年级:整型,值必须在 14 之间。(分数:2.00)_关系数据库操作语言(一)答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:18,分数:11.00)1.若要在 SQL Server中存储图像、Word 文档等文件,可采用的数据类型是_。Abigint Btext Cimage Dntext(分数:0.50)A.B.C. D.解析:解析 image 用于存储大容量的、可变长的二进制字符型数据,可以用于存储多种格式的文件,如 Word、Excel、BMP、GIF、JPEG、MP3、RM 等格式的文件数据,最多可存储 231-1字节的数据。2.有
28、教师表(教师号,姓名,职称,所在系)和授课表(教师号,课程号,授课学年,授课时数),同一门课程可由多名教师讲授,同一名教师也可讲授多门课程。查询从未被“教授”讲授过的课程的课程号,正确的语句是_ASELECT 课程号 FROM授课表 a JOIN教师表 b ON a.教师号=b.教师号WHERE职称!=教授BSELECT 课程号 FROM授课表 a RIGHT OUTER JOIN教师表 bON a.教师号=b.教师号WHERE职称!=教授AND a.课程号 IS NOT NULLCSELECT 课程号 FROM授课表 WHERE课程号 NOTIN(SELECT课程号 FROM授课表 a JO
29、IN教师表 b ON a.教师号=b.教师号WHERE职称教授)DSELECT 课程号 FROM授课表 WHERE课程号 IN(SELECT课程号 FROM授课表 a JOIN教师表 b ON a.教师号=b.教师号WHERE职称!=教授)(分数:0.50)A.B.C. D.解析:解析 本题中需要查询从未被“教授”讲授过的课程的课程号,可以先查询出所有被教授讲授过的课程,使用如下 SQL语句可以实现:select课程号 from授课表 a JOIN教师表 b On a.教师号=b.教师号 where 职称=教授找到所有被教授讲授的课程后,再通过 NOT IN操作即可得到所有未被教授讲授过的课程
30、。3.若给出关系 Student(S_no,Shame,Sage,S_sex,SD_name,S_add,S_tel),并用 SQL语言定义Student关系如下:CREATE Student(S_no CHAR(6),Shame CHAR(30)NOT NULL,Sage CHAR(30),S_sex CHAR(1),SD_name CHAR(20),S_add CHAR(30),S_tel CHAR(20),PRTNARY KEY(S_no)以下哪条记录插入到 Student表能被正确地执行_。AINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_na
31、me,S_add,S_tel)VALUES(010456,小芳,18,“,“,“,“)BINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_name,S_add,S_tel)VALUES(010456,小芳,18,女,计算机学院,北京,88661200)CINSERT INTO Student(S_no,Sname,Sage,S_sex,SD_name,S_add,S_tel)VALUES(,小芳,18,F,计算机学院,北京,88661200)DINSERT INTO Student(S_no,Shame,Sage,S_sex,SD_name,S_add,
32、S_tel)VALUES(010456,118,F,计算机学院,北京,88661200)(分数:0.50)A. B.C.D.解析:4.在 SQL Server中设计用户表时,固定长度的身份证号码最好采用下面哪种数据类型进行存储_。Atext Bvarchar Cint Dchar(分数:0.50)A.B.C.D. 解析:解析 char 数据类型可用来存储固定长度的普通编码字符型数据,由于身份证号码长度固定,因而可使用 char类型来存储;varchar 用于存储变长的普通编码字符型数据;text 用于存储大量变长的普通编码字符型数据;int 用于存储范围为-231231-1 之间的整数。5.删
33、除当前数据库中名为 Student的表,以下 SQL语句正确的是_。ADROP TABLE StudentBDELETE TABLE StudentCREMOVE TABLE StudentDCLEAR TABLE Student(分数:0.50)A. B.C.D.解析:解析 在 SQL语言中,可以使用 DROP TABLE命令来删除一个表结构,但是需要考虑待删除的表是否与其他表之间存在关联。如果该表的某一个属性是另一个关系表的外码,则需要先删除与之关联的表或者删除关联表的外码约束,否则会在 SQL Server查询分析器中提示如下报错信息:“未能除去对象XXX,因为该对象正由一个 FOREI
34、GN KEY约束引用”(XXX 表示待删除的表名)。6.在创建关系表时,使用以下哪个关键字用来定义唯一约束_。ANOTNULL BUNIQUE CCHECK DPRIMARYKEY(分数:0.50)A.B. C.D.解析:7.有学生关系:学生(学号,姓名,年龄),对学生关系的查询语句如下:SELECT 学号 FROM 学生 WHERE 年龄20 AND 姓名 LIKE %海如果要提高该语句的查询效率,应该建立索引的属性是_。A学号 B姓名 C年龄 D(学号,姓名)(分数:0.50)A.B.C. D.解析:8.给定供应关系 SPJ(供应商号,零件号,工程号,数量),查询至少用了 3家不同供应商(
35、包含 3家)供应的零件的工程,输出其工程号,并按工程号降序排列,以下 SQL语句正确的是_。ASELECT 工程号 FROM SPJGROUP BY工程号HAVING COUNT(DISTINCT(供应商号)2ORDER BY工程号 DESCBSELECT 工程号 FROM SPJGROUP BY工程号 DESCWHERE COUNT(供应商号)2CSELECT 工程号 FROM SPJORDERBY 工程号HAVING COUNT供应商号)2DSELECT 工程号 FROM SPJORDERBY 工程号WriERE COUNT (DISTINCT(供应商号)2(分数:0.50)A. B.C.
36、D.解析:解析 查询至少使用了 3家不同供应商供应的零件的工程,首先需要按照工程号进行分组,再使用 HAVING子句对分组结果进行过滤。由于同一个工程中提供零件的供应商号可能重复,因此需要用DISTINCT关键字去掉重复的供应商号,然后用聚合函数 COUNT进行计数。要求结果按工程号降序排列,因此需要增加“ORDER BY 工程号 DESC”子句。9.现有如下两个关系表:职工(职工号,姓名,性别,年龄,职务,基本工资,职务津贴)男职工(职工号,姓名,性别,年龄,基本工资)要求将职工表中男职工的信息插入到男职工表中,以下 SQL语句正确的是_。AINSERT INTO 男职工(职工号,姓名,性别,年龄,基本工资)VALUESSELECT * FROM职工