access和SQL数据库练习及答案(共8页).doc
精选优质文档-倾情为你奉上数据库技术及应用实践考核上机考试练习题B()给定的学生_选课库中数据库表结构及样本记录表1-表6数据如下:学生(学号,姓名,年龄,性别,所在系); 课程(课程号,课程名,先行课); 选课(学号,课程号,成绩).表1 学生表结构字段名数据类型长度是否为空约束学号CHAR5否主键姓名CHAR8否年龄SMALLINT默认20性别CHAR2“男”或“女”所在系CHAR20表2 课程表结构字段名数据类型长度是否为空约束课程号CHAR5否主键课程名CHAR20否先行课CHAR5表3 选课表结构字段名数据类型长度是否为空约束学号CHAR5否主键,外键课程号CHAR5否主键,外键成绩SMALLINT0100表4 学生表数据序号学号姓名性别年龄所在系1S1李明男21计算机2S2张小红男21计算机3S3李和明女22计算机4S4张三男21计算机5S5刘宏男23计算机6S6王红应女20计算机7S7吴非男19数学8S8丁玉男21数学9S9赵名女21数学10S12张共可男22物理表5 课程表数据序号课程号课程名先行课1C1计算机引论2C2数据结构C33C3C语言编程C14C4软件工程C65C6数据库C26C5计算机文化7C7高等数学8C8概率统计C99C9线性代数C710C10力学表6 选课表数据序号学号课程号成绩1S1C1602S2C1933S3C14S4C1895S1C2796S2C27S3C2808S4C3909S1C39210S2C38111S1C78512S4C775一、根据给定的样本数据,按顺序完成下列操作: 1、数据定义和输入记录(1)创建学生-课程数据库。(2)创建学生表、课程表和选课表,并满足约束条件。(3)输入样本记录。(4)查询输入的样本记录,并保存结果。(5)创建计算机系学生成绩视图。属性包括:学号、姓名、课程名和成绩。(6)查询已创建的视图,并保存结果。(7)创建学生表、课程表和选课表的数据库关系图表。2、数据更新(1)输入一条新学生记录,例如:(S11, 李阳, 男,21,计算机)(2)删除一条学生记录,例如:删除学号=S5的记录。(3) 修改一条学生记录,例如:将学号=S5的记录的系修改为计算机(RSL改了吴非)。(4)查询当前的学生记录,并保存结果。(5)求每个系的学生的平均年龄,并将结果存入到系平均年龄数据库中。标准:select 所在系, avg(年龄) AS 平均年龄 into 平均年龄数据库 from 学生group by 所在系;SELECT 学生.所在系, Avg(学生.年龄) AS 平均年龄FROM 学生GROUP BY 学生.所在系;3、单表查询(1)求计算机系的学生学号和姓名。(2)求选修了课程的学生学号。标准:select distinct 学号from 选课;1. distinct 去除重复的数据(3)求选修C1课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。SELECT 选课.学号, 选课.成绩, 选课.课程号FROM 选课WHERE 课程号="C1"ORDER BY 成绩 DESC ,学号;(4)求数学系或计算机系姓张的学生的信息。错:只求计算机SELECT 学生.所在系, 学生.姓名, 学生.年龄, 学生.性别, 学生.学号FROM 学生WHERE (学生.所在系)="计算机") AND (学生.姓名) Like "张*");=结果:SELECT 学生.所在系, 学生.姓名, 学生.年龄, 学生.性别, 学生.学号FROM 学生WHERE (学生.姓名) Like"张*")AND 所在系 IN ("计算机","数学");=(5)求缺少了成绩的学生的学号和课程号。SELECT 选课.学号, 选课.课程号FROM 选课WHERE (选课.成绩) Is Null);4、连接查询(1)求学生的学号、姓名、选修的课程名及成绩。SELECT 学生.学号, 学生.姓名, 课程.课程名, 选课.成绩FROM 课程 INNER JOIN (学生 INNER JOIN 选课 ON 学生.学号 = 选课.学号) ON 课程.课程号 = 选课.课程号; (2)求选修C1课程且成绩为90分以上的学生学号、姓名及成绩。SELECT 学生.学号, 学生.姓名, 选课.成绩FROM 学生 INNER JOIN 选课 ON 学生.学号 = 选课.学号WHERE (选课.成绩)>=90) AND (选课.课程号)="C1");(3)查询每一门课的间接先行课(即先行课的先行课)。select a.课程号, b.先行课from curr a, curr bwhere a.先行课=b.课程号;(4)求学生表与选课表的左外连接。select * from 学生 left join 选课 on 学生.学号=选课.学号;(5)求选课表与课程表的右外连接。5、嵌套查询(1)求选修了高等数学的学生学号和姓名。select 学号, 姓名from stu where 学号 in(select 学号 from 选课 where 课程号=(select 课程号 from curr where 课程名='高等数学');错:以下属于连接查询 SELECT 课程.课程名, 学生.学号, 学生.姓名FROM 课程 INNER JOIN (学生 INNER JOIN 选课 ON 学生.学号 = 选课.学号) ON 课程.课程号 = 选课.课程号WHERE (课程.课程名)="高等数学");(2)求C1课程的成绩高于张三的学生学号和成绩。SELECT 学号,成绩FROM 选课WHERE 课程号="C1" AND 成绩 > (SELECT 成绩 FROM 选课 WHERE 学号=(SELECT 学号 FROM 学生 WHERE 姓名="张三") AND 课程号="C1");(3)求其他系中比计算机系学生年龄都小的学生。select * from stu where 年龄<(select min(年龄) from 学生 where所在系='计算机');(4)求没有选修C2课程的学生姓名。select 姓名from stu where 学号not in(select 学号from select_curr where 课程号='C2');(5)求至少选修了两门课程的学生信息。SELECT *FROM 学生WHERE 学号 IN (SELECT 学号 FROM 选课 GROUP BY 学号 HAVING COUNT(学号)>=2 );6、组合查询(1)求学生的总人数。SELECT Count(学生.学号) AS 学号之计数FROM 学生;(2)求选修了课程的学生人数。select count(学号) as 人数FROM(Select distinct 学号 FROM 选课);(3)求计算机系学生的平均年龄定价,用GROUP BY表示。SELECT AVG(年龄) AS 平均年龄FROM 学生WHERE 所在系="计算机"(4)求各课程号和选修该课程的人数。SELECT 课程号,COUNT(学号) AS 人数FROM 选课GROUP BY 课程号;(5)求选修课超过3门课的学生学号。select 学号from select_curr group by学号having count(课程号)>3;二、关于程序验收1、通过可视化工具,验收已创建的数据库、数据表、视图关系表和数据库关系表。2、通过已保存的SQL程序代码,验收查询结果。3、上机操作工作量:除了操作1的数据定义和样本数据输入必做外,其余操作2至操作6,考试时每种操作出1-2道小题,共约8-10题。专心-专注-专业