(1)用SQL语句完成下列操作:将选课在5门课程以上(包括5门)的学生的学号、姓名、平均分和选课门数按平均分降序排序,并将结果存放于数据库表stu_temp名为学号、姓名、平均分和选课门数)。 (2)建立一个名为menu_lin的下拉式菜单,菜单中

admin2013-03-31  19

问题 (1)用SQL语句完成下列操作:将选课在5门课程以上(包括5门)的学生的学号、姓名、平均分和选课门数按平均分降序排序,并将结果存放于数据库表stu_temp名为学号、姓名、平均分和选课门数)。
    (2)建立一个名为menu_lin的下拉式菜单,菜单中有两个菜单项“查询”和“退出”。“查询”项下还有一个子菜单,子菜单有“按姓名”和“按学号”两个选项。在“退出”菜单项下创建过程,该过程负责使程序返回到系统菜单。

选项

答案(1)步骤1:在命令窗口执行命令:OPEN DATABASE学生,打开“学生”数据库。 步骤2:在命令窗口执行命令(以下程序是通过查询设计器生成): SELECT 学生.学号,学生.姓名,AVG(选课.成绩) AS平均分,;&& AVG()函数用来求平均分COUNT(选课.课程号)AS选课门数; &&COUNT()函数用来统计每个学生选修课程数FROM 学生!学生INNER.JOIN学生!选课; ON 学生.学号=选课.学号; GROUP BY选课.学号; &&按选课表的学号 字段对记录进行分组 HAVING COUNT(选课.课程号)>=5, &&进一步限定分组后的条件,只求选课数在4门以上的学生成绩 ORDER BY 3 DESC; &&按输出结果的第3列字段(即“平均分”字段)值降序排序 INTO TABLE STU_TEMP.DBF (2)步骤1:在命令窗口执行命令:CREATE MENU menu_lin,在弹出的“新建菜单”对话框中单击“菜单”图标按钮,打开菜单设计器。 步骤2:在菜单设计器“菜单名称”列的文本框中依次输入“查询”和“退出”两个主菜单名,“结果”下拉框中选择为“子菜单”,单击“查看”行的“创建”按钮进入下级菜单设计,在“菜单名称”列的第1、2行文本框中依次输入子菜单名“按姓名”和“按学号”。 步骤3:通过“菜单级”下拉框返回主菜单项设计界面,选择“退出”菜单命令的“结果”项为“过程”,并通过单击“创建”按钮打开过程编辑器添加返回到系统菜单的命令: SET SYSMENU TO DEFAULT。 步骤4:执行【菜单】→【生成】菜单命令,在弹出的VisualFoxPro对话框中单击“是”按钮,接着系统会弹出“生成菜单”对话框,单击“生成”按钮生成一个可执行的菜单文件。 步骤5:在命令窗口执行命令:DO menu_lin.mpr,运行菜单查看结果。

解析 (1)本题主要考查了SQL分组与计算查询。本题的关键首先是要确定进行计算的字段有哪些、进行何种计算,然后判断根据哪个字段进行分组。根据题目要求,在输出字段中“学号”和“姓名”是表中原有的字段,而“平均分”和“选课门数”字段则需要通过计算得出,通过AS短语可指定输出新的字段名。
“平均分”可以通过求每个学生“成绩”的平均值得到,使用AVG函数求平均值;而“选课门数”可以通过求每个学生选修的课程总数得到,在“选课”表中可以通过“选课号”的不同判断每个学生共选修了几门课程,使用COUNT函数可以进行计数统计,此处注意不要与求和函数SUM混淆。
从上面两个函数不难看出,这两个函数都是在针对每个学生进行操作的,因此可以通过“选课”表中的“学号”字段分组,将“学号”相同的记录分到一组再进行计算。
另外,题目还要求对选课在4门以上的学生成绩进行计算,因此,该条件必须通过HAVING子句对分组统计的结果做进一步限制,对满足该条件的学生才进行计算输出结果。此处不要将HAVING条件短语与WHERE条件短语混淆,HAVING短语是在进分组计算的基础上,对所得的结果做进一步的限制,而WEHRE条件短语基本与分组计算结果没有关系。
    (2)本题考查的是菜单设计器的使用。设计过程中注意主菜单项与子菜单项的建立,本题属于比较简单的操作。
转载请注明原文地址:https://kaotiyun.com/show/fusp777K
0

最新回复(0)