计算机等级考试(国家)-关系数据库操作语言sql(四)
(8页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
10.90 积分
关系数据关系数据库库操作操作语语言言SQL(四四)设计题设计题 在SQL Server 2000中,有教师表Teachers(TeacherID,Name, LeaderID.,其中 TeacherID是主码,类型是长度为4的普通编码定长字符串,且每位是0~9的数字字符;Name的类型 是长度为10的普通编码可变长字符串;LeaderID是每个教师的领导的TeacherID。 1、写出创建Teachers表的SQL语句,要求语句中包含所有的约束。 2、现要查询TeacherID为“1234”的教师的领导的领导的TeacherID,请给出相应的SQL语句,要 求只使用一条SQL语句实现,且此语句中不允许包含子查询。 3、如下两个关系表:Emp(eid, ename, age, did, salary),其各列含义为:职工号,姓名,年龄,部门号,工 资。Dept(did, dname, mgr_id),其各列含义为:部门号,部门名称,部门经理职工号。写出一条SQL语句,查询工资大于10000,且与其所在部门的经理年龄相同的职工姓名。4、写出创建下述关系表的SQL语句。 Student表表结结构构列名含义数据类型约束 Sno学号普通编码定长字符串,长度为7主码 Sname姓名普通编码定长字符串,长度为10非空 Ssex性别普通编码定长字符串,长度为2取值范围为:{男,女} Sage年龄微整型大于等于14Sdept所在系普通编码不定长字符串,长度为 20Course表表结结构构列名含义数据类型约束 Cno课程号普通编码定长字符串,长度为10主码 Cname课程名普通编码不定长字符串,长度为20非空 Periods学时数小整型大于0Property 课程性质普通编码定长字符串,长度为4取值范围为:{必 修,选修}存在如下表结构: Student表表结结构构列名含义数据类型约束 Sno学号普通编码定长字符串,长度为7主码 Sname姓名普通编码定长字符串,长度为10非空 Ssex性别普通编码定长字符串,长度为2取值范围为:{男,女} Sage年龄微整型大于等于14Sdept所在系普通编码不定长字符串,长度为 20Course表表结结构构列名含义数据类型约束 Cno课程号普通编码定长字符串,长度为10主码 Cname课程名普通编码不定长字符串,长度为20非空 Periods学时数小整型大于0Property 课程性质普通编码定长字符串,长度为4取值范围为:{必 修,选修}SC表表结结构构列名含义数据类型约束Sno学号普通编码定长字符串,长度为7主码,引用Student的外 码 Cno课程号普通编码定长字符串,长度为10 主码,引用Course的外码 Grade成绩小整型取值范围:0~100写出实现下述操作的SQL语句: 5、查询选课门数超过2门的学生的平均成绩和选课门数。 6、列出总成绩超过200分的学生,要求列出学号、总成绩。 7、查询选修了“C02”号课程的学生的姓名和所在系。 8、查询成绩在80分以上的学生的姓名、课程名和成绩,并将结果按成绩的降序排列。 9、查询计算机系男生修了“数据库基础”的学生的姓名、姓名和成绩。 10、查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号和 考试成绩。 11、列出“数据库基础”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩。 12、查询哪些学生合选了一门课程,要求列出合选课程的学生的学号和课程号。 13、查询哪些课程没人选,要求列出课程号和课程名。 14、查询计算机系学生考试成绩高于全体学生的总平均成绩的学生的姓名、考试的课程号和考试成绩。15、查询VB考试成绩最低的学生的姓名、所在系和VB成绩。 16、查询选修了VB课程的学生的学号、姓名、所在系和成绩,并对所在系进行如下处理:当所在系为 “计算机系”时,显示“CS”;当所在系为“信息系”时,显示“IS”;当所在系为“数学系”时,显示“MA”; 对其他系,均显示“OTHER”。 17、查询每门课程的选课人数,如果选课人数超过了100人,显示“人多”;如果选课人数在40~100 之间,显示“一般”;如果选课人数少于40人,显示“较少”;如果此门课程没人选,显示“无人选”。 18、在课程表中增加一条新记录:课程号为“C100”,课程名为“Java”,学时数32,课程性质为“选修” 。 19、删除修课成绩小于50分的学生的修课记录。 20、删除信息系修课成绩小于50分的学生的修课记录。 21、将所有选修了“C01”号课程的学生的成绩加10分。 22、将计算机系所有选修了“计算机文化学”课程的学生的成绩加10分。 有如下关系数据库:学生(学号,姓名,性别,专业,奖学金)课程(课程号,名称,学分)学习(学号,课程号,分数)用SQL语言完成下列操作: 23、检索没有任何一门课程成绩在80分以下的所有学生的信息,包括学号、姓名和专业; 24、检索没有获得奖学金同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业; 25、对成绩得过100分的学生,如果没有获得奖学金的,将其奖学金设为1000元;26、定义学生成绩得过满分(100分)的课程视图AAA,包括课程号、名称和学分。 现有“学生-选课-课程”关系数据库如下:学生表S(Sno, Sname, Sage, Ssex, Sdept),各属性含义依次为学号,姓名,年龄,性别, 所在系;选课表SC(Sno, Cno, Grade),各属性含义依次为学号,课程号,成绩;课程表C(Cno, Cname, Cteacher),各属性含义依次为课程号,课程名,授课教师;试用SQL语言完成以下操作: 27、检索年龄在18到22之间(含18和22)的男生的学号、姓名及年龄; 28、检索选修了“王杰”老师所授课程的学生的学号和姓名。 学生管理数据库包括3个基本表,其结构为:学生(学号,姓名,年龄,所在系)课程(课程表,课程号)选课(学号,课程号,成绩)试用SQL语言完成操作: 29、求数学系或计算机系姓张的学生信息; 30、求学生人数; 31、求选修高等数学的学生人数; 32、求选修了高等数学的学生学号和姓名; 33、求其他系中比计算机系学生年龄都小的学生; 34、求选修课程号为C1的课程且成绩为90分以上的学生学号、姓名及成绩。 已知关系模式:S(SNO, SNAME.学生关系,SNO为学号,SNAME为姓名;C(CNO, CNAME, CTEACHER)课程关系,CNO为课程号,CNAME为课程名,CTEACHER为任课教师;SC(SNO, CNO,SCGRADE.选课关系,SCGRADE为成绩。 35、找出没有选修过“李明”老师讲授课程的所有学生姓名; 36、列出有两门以上(含两门)不及格课程的学生姓名及其平均成绩; 37、列出既学过“1”号课程,又学过“2”号课程的所有学生姓名。 38、在SQL Server 2000中,设某数据库中有商品表(商品号,商品名,进货价格),商品号为主码; 销售表(商品号,销售时间,销售数量,销售价格,本次利润),商品号和销售时间为主码,销售价格为 本次销售商品的单价。现要求每当在销售表中插入前4列数据时(假设一次只插入一行数据),系统自 动计算本次销售产生的利润,并将该利润赋给销售表的第5列“本次利润”。请编写实现上述功能的后 触发型触发器代码。在SQL Server 2000的某数据库中有如下两张关系表:学生表(学号,姓名,性别,系号),学号为主码系表(系号,系名,系简称),系号为主码 39、在数据库中执行如下T-SQL代码:DECLARE @DeptID varchar(10)DECLARE @cnt intSet @cnt = 0DECLARE cursor1 cursor FOR SELECT 系号 FROM 系表WHERE 系名 LIKE '%电%'OPEN cursor1FETCH NEXT FROM cursor1 INTO @DeptIDWHERE @@FETCH_STATUS=0BEGINDECLARE @temp_cnt intSELECT @temp_int = COUNT(*) FROM 学生表 WHERE 系号 = @DeptIDSET @cnt = @cnt + @temp_cntFETCH NEXT FROM cursor1 INT0 @DeptIDENDCLOSE cursor1DEALLOCATE cursor1SELECT @cnt执行过程中发现速度比较慢,为了解决性能问题,需在功能不变的情况下,将此T-SQL代码改为 一条SQL语句。请写出此SQL语句(语句中不能含有子查询)并说明为什么此种修改可以提高性能。 40、设在学生表的(姓名,系号)列上建有一个复合索引,该索引是否有助于提高下列两个语句的查询 效率,并说明原因。SELECT * FROM学生表 WHERE 系号='1';SELECT * FROM 学生表 WHERE 姓名='张三' 有学生表(学号,姓名,年龄,性别,系名,专业名,班号),设一个系可有多个专业,每个专业可有多个 班,各班班号不重复,一个学生只在一个班学习,现经常需要按“系名”和“班号”进行查询,为提高查 询效率,需要为“系名”和“班号”两个列建立一个非聚集索引,建立此索引有下列两种方法:方法1:索引列顺序为(系名,班号)方法2:索引列顺序为(班号,系名) 41、这两种方法哪个更合理?请简要说明原因。 42、针对你认为合理的方法,写出创建该索引的SQL语句。 在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式:系(系号,系名),系号为主码学生(学号,姓名,所在系号),学号为主码课程(课程号,课程名,开课系号),课程号为主码选课(学号,课程号,选课时间),学号和课程号为主码开发人员在将关系模式实施到SQL Server 2000的“教务”数据库时,使用了如下表结构定义 语句:CREATE TABLE系(系号varchar43NOT NULL,系名varchar44)CREATE TABLE学生(学号varchar45NOT NULL,姓名varchar45,所在系号varchar43)CREATE TABLE课程(课程号varchar45NOT NULL,课程名varchar44,开课系号varchar43)CREATE TABLE选课(学号varchar45NOT NULL,课程号varchar45NOT NULL,选课时间datetime)在执行如下查询语句时发现执行效率很低:SELECT*FROM 选课 JOIN 学生 ON 学生. 学号=选课. 学号JOIN 系 ON 系. 系号=学生. 所在系号JOIN 课程 ON 课程. 课程号=选课. 课程号WHERE 系. 系号=012AND convert(varchar43,选课时间,120)>=2010-01-0143、在查找原因时发现建表语句有问题。请指出问题并说明该问题是否会影响此查询语句的执行效率。44、设已在“选课”表的“选课时间”列及“学生”表的“所在系号”列上建立了索引。请问这两个索引是 否能够提高该查询语句的执行效率?如果不能,请说明原因。答案:设计题设计题1、create table Teachers(TeacherID char(4) check(TeacherID like“[0~9][0~9][0~9][0~9]“),Name varchar(10),LeaderID char(4),primary key TeacherID,foreign key LeaderID references Teachers(TeacherID)) [解析] 创建表格使用CREATE语句。2、select T2. LeaderID from Teachers as T1 join Teachers as T2 on T1.LeaderID=T2. TeacherID where T1. TeacherID='1234' 3、select a. * from Emp a, Dept b, Emp c where a. did=b. did and b. mgr_id=c. eid and a. salary>10000 and a. age=c. age 4、创建Student表的SQL语句为:CREATE TABLE Student(Sno char(7) primary key, Sname char(10) not null,Ssex char(2) check(Ssex In('男','女')),Sage tinyint check(Sage > = 14),Sdept varchar(20))创建Course表的SQL语句为:CREATE TABLE Course(Cno char(10) primary key,Cname varchar(20) not null,Periods smallint check (Periods>0),Property char(4) check(Property in('必修','选修'))) [解析] 本题考查的是SQL语句。 5、select sno, sum (grade) as/总成绩,avg (grade) as/平均成绩,count (*) as/选 课门数 from scgroup by sno having count (*) >2 [解析] 本题考查的是SQL操作。6、select sno, sum (grade) 总成绩 from scgroup by sno having sum (grade) >200 7、select sname, sdept from Student join SC on Student. Sno =SC. Snowhere cno= 'C02' 8、select sname, cno, gradefrom student s join sc on s. sno=sc. snowhere grade > 80Order by grade desc 9、select sname,ssex, gradefrom student s join sc on s. sno=sc. snojoin course c on c. cno=sc. cnowhere sdept= '计算机系' and ssex= '男'and cname= '数据库基础' 10、select s. sno, sname, cno, grade from Student s left join SC on s. Sno=SC. Sno 11、select top 3 s. sno, sname, sdept, gradefrom Student s join sc on s. Sno=sc. Snojoin Course c on c. Cno = sc. Cnowhere cname = '数据库基础'order by grade desc 12、select t1. sno, t2. sno, t1.cnofrom sc as t1 join sc as t2on t1. cno = t2. cnowhere t1. sno < t2. sno 13、select c. cno, cname from course c left join scon c. cno = sc. cnowhere sc. cno is null 14、select sname, cname, gradefrom student s join sc on s. sno = sc. snojoin course c on c.cno = sc. cnowhere sdept ='计算机系'and grade > (select avg(grade) from sc) 15、select sname, sdept, gradefrom student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cnowhere grade = (select min(grade) from scwhere cno in (select cno from course where cname ='vb'))and cname = 'vb' 16、select s. sno 学号,sname 姓名,case sdeptwhen'计算机系'then'CS'when'信息系'then'IS'when'数学系'then'MA'else'OTHER'end as 所在系,grade 成绩from student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cno where cname = 'vb' 17、select c. cno,casewhen count(sc. cno) > 100 then'人多'when count(sc. cno) between 40 and 100 then'一般'when count(c. cno) < 40 then'较少'when count(sc. cno) = 0 then'无人选'end as选课人数from sc right join course c on sc. cno = c. cnogroup by c. cno 18、insert into Course values('C100','Java',32,'选修') 19、delete from sc where grade<50 20、(a)用连接查询实现delete from sc from sc join student s on s. sno = sc. snowhere sdept ='信息系'and grade < 50(b)用子查询实现delete from sc where sno in (select sno from student where sdept = '信息系')and grade < 50 21、update sc set grade = grade + 10where cno = 'c01' 22、(a)用子查询实现update sc set grade = grade + 10where sno in (select sno from student where sdept = '计算机系')and cno in (select cno from course where cname = '计算机文化学')(b)用连接实现update sc set grade = grade - 10from student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cnowhere sdept ='计算机系'and cname ='计算机文化学' 23、SELECT 学号,姓名, 专业 FROM 学生 WHERE 学号 NOT IN(SELECT 学号 FROM 学习 WHERE 分数<80); 24、SELECT 学号,姓名,专业 FROM 学生,学习 WHERE 学生. 学号=学习. 学号 AND 学习. 课 程号=课程. 课程号 AND 学生. 奖学金<=0 AND 学习. 分数>95; 25、UPDATE 学生 SET 奖学金=1000 WHERE 奖学金 <=0 AND 学号 IN(SELECT 学号 FROM 学习 WHERE 分数 =100); 26、CREATE VIEW AAA(课程号,名称,学分)AS SELECT 课程号,名称,学分 FROM 课程 WHERE 课程号 IN(SELECT 课程号 FROM 学习 WHERE 分数=100); 27、方法 1:SELECT Sno, Sname, SageFROM SWHERE Sage BETWEEN 18 AND 22AND Ssex='男'方法2:SELECT Sno, Sname, SageFROM SWHERE Sage>=18 AND Sage <=22AND Ssex='男' 28、方法1:SELECT Sno, SnameFROM S, SC, CWHERE S. Sno=SC. SnoAND SC. Cno=C. CnoAND C. Cteacher='王杰'方法2:SELECT Sno, Sname FROM S WHERE Sno IN(SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM C WHERE Cteacher='王杰')) 29、select * from 学生 where所在系in('数学系','计算机系')and姓名like'张%' 30、select count(*)as 学生人数from学生 31、select count(*)from学生,课程,选课where学生. 学号=选课. 学号 and 选课. 课程号=课程. 课程号 and 课程. 课程表='高等数学' 32、select学号, 姓名from选课inner join课程on(选课. 课程号=课程. 课程号)inner join学生on(选课. 学号=学生. 学号)where课程号='高等数学' 33、select姓名,年龄from学生where所在系not in(' 计算机系')and年龄<(select min(年龄)from学生where所在系='计算机系') 34、select学 号,姓名,成绩from选课inner join课程on(选课. 课程号=课程. 课程号)inner join学生on(选课. 学号=学生. 学号)where课程号='C1'and成绩>90 35、SELECT SNAME FROM SWHERE NOT EXISTS(SELECT * FROM SC, CWHERE SC. CNO=C. CNOAND CNAME='李明'AND SC. SNO=S. SNO) 36、select s. sno, avg(scGrade) from S, SCwhere s. sno in(select sc. sno from scinner Join con c. cno=sc. cnowhere sc. scGrade<60group by snohaving count(*)>=2)and s. sno=sc. snogroup by s. sno 37、select S. SNO, S. SNAME from sc, swhere cno=1 and sc. sno in(select sno from sc where cno=2)and s. sno=sc. sno 38、CREATE TRIGGER update_saleON 销售表 FORUPDATEFOREACHROWASBEGINUPDATE Table_sale SET 本次利润=销售价格-(SELECT 进货价格 FROM 产品表)ENDCREATE TRIGGER Insert_saleON 销售表 FOR INSERTFOREACHROWASBEGININSERT INTO 销售表 VALUES(new. 商品号,new. 销售时间,new. 销售数量,new. 销 售价格)END 39、select COUNT(*)From 学生表,系表Where 学生表. 系号=系表. 系号And 系表. 表名 like'%电%'这种写法避免了使用游标,并且灵活的使用笛卡儿乘积,有效的提高了性能。 40、不能, 一是因为数据表带有的索引越多,需要做出的修改就越多,平均性能的降低程度也就越大。二是索引 会花费磁盘空间,多个索引相应地花费更多的磁盘空间。 41、方法1更加合理,理由如下:更加 有利于减少索引层次,提高查询效率;更加符合使用习惯;更加便于(系、班)进行统计。 42、create index index_1 on 学生表(系名,班号) 43、建表时没有设置主键,但不会 影响此查询语句的执行效率。 44、“选课”表的“选课时间”列上建立了索引能够提高执行效率。 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引。索引的作用就类似于书的目录, 书的目录会按照章节的顺序排列,会指想某一张的位置。这样如果在一本数百页的书里面查找某个章 节位置的时候,我们就可以只扫描书的目录,扫描的范围缩小了”倍,查询的效率自然就提高了。另外 在SQL Server内存够用的情况下索引会被放到内存中,在内存中查找自然又会提高效率;所以我们 必须得合理利用索引。 关 键 词: 计算机等级考试 国家 关系 数据库 操作 语言 sql
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:计算机等级考试(国家)-关系数据库操作语言sql(四)
链接地址: https://www.wenku365.com/p-9296885.html