sql数据库 建立三个表 student(学号 姓名 性别) sc(学号 课程号 成绩)course(课程号 课程名 分数 )

要求有二门以上(含两门)不及格课程的学生姓名及其平均成绩,麻烦详细说一下group by的用法

select 姓名,savg from (select 学号,avg(成绩)as savg from sc where 成绩<60 group by 学号 having count(学号)>=2) t1,student where t1.学号=student.学号

1. Group By 语句简介:
  Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。   2. Group By 的使用:   上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。   2.1 Group By [Expressions]:   这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:   FruitName ProductPlace Price
Apple China $1.1
Apple Japan $2.1
Apple USA $2.5
Orange China $0.8
Banana China $3.1
Peach USA $3.0
 如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成:   SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国   FROM T_TEST_FRUITINFO   GROUP BY ProductPlace   这个SQL语句就是使用了Group By + 分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”很好理解对吧。这里值得注意的是结果集中有两个返回字段,一个是ProductPlace(出产国), 一个是水果种类。如果我们这里水果种类不是用Count(*),而是类似如下写法的话:   SELECT FruitName, ProductPlace FROM T_TEST_FRUITINFO GROUP BY ProductPlace   那么SQL在执行此语句的时候会报如下的类似错误:   选择列表中的列 'T_TEST_FRUITINFO.FruitName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。   这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。我们可以将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。   2.2 Group By All [expressions] :   Group By All + 分组字段, 这个和前面提到的Group By [Expressions]的形式多了一个关键字ALL。这个关键字只有在使用了where语句的,且where条件筛选掉了一些组的情况才可以看出效果。在SQL Server 2000的联机帮助中,对于Group By All是这样进行描述的:   如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。   其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由Group By子句产生的所有组...没有ALL关键字,那么不显示不符合条件的行组。”这句话听起来好像挺耳熟的,对了,好像和LEFT JOIN 和 RIGHT JOIN 有点像。其实这里是类比LEFT JOIN来进行理解的。还是基于如下这样一个数据集:   FruitName ProductPlace Price
Apple China $1.1
Apple Japan $2.1
Apple USA $2.5
Orange China $0.8
Banana China $3.1
Peach USA $3.0
 首先我们不使用带ALL关键字的Group By语句:   SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国   FROM T_TEST_FRUITINFO   WHERE (ProductPlace <> 'Japan')   GROUP BY ProductPlace   那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。   现在我们加入ALL关键字:   SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国   FROM T_TEST_FRUITINFO   WHERE (ProductPlace <> 'Japan')   GROUP BY ALL ProductPlace   重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。   2.3 GROUP BY [Expressions] WITH CUBE | ROLLUP:   首先需要说明的是Group By All 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。   首先先说说CUBE关键字,以下是SQL Server 2000联机帮助中的说明:   指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。   结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。   我们通常的Group By语句是按照其后所跟的所有字段进行分组,而如果加入了CUBE关键字以后,那么系统将根据所有字段进行分组的基础上,还会通过对所有这些分组字段所有可能存在的组合形成的分组条件进行分组计算。由于上面举的例子过于简单,这里就再适合了,现在我们的数据集将换一个场景,一个表中包含人员的基本信息:员工所在的部门编号(C_EMPLINFO_DEPTID)、员工性别(C_EMPLINFO_SEX)、员工姓名(C_EMPLINFO_NAME)等。那么我现在想知道每个部门各个性别的人数,那么我们可以通过如下语句得到:   SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM   FROM T_PERSONNEL_EMPLINFO   GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX   但是如果我现在希望知道:   1. 所有部门有多少人(这里相当于就不进行分组了,因为这里已经对员工的部门和性别没有做任何限制了,但是这的确也是一种分组条件的组合方式);   2. 每种性别有多人(这里实际上是仅仅根据性别(C_EMPLINFO_SEX)进行分组);   3. 每个部门有多少人(这里仅仅是根据部门(C_EMPLINFO_DEPTID)进行分组);那么我们就可以使用ROLLUP语句了。   SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM   FROM T_PERSONNEL_EMPLINFO   GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX WITH CUBE   那么这里你可以看到结果集中多出了很多行,而且结果集中的某一个字段或者多个字段、甚至全部的字段都为NULL,请仔细看一下你就会发现实际上这些记录就是完成了上面我所列举的所有统计数据的展现。使用过SQL Server 2005或者RDLC的朋友们一定对于矩阵的小计和分组功能有印象吧,是不是都可以通过这个得到答案。我想RDLC中对于分组和小计的计算就是通过Group By的CUBE和ROLLUP关键字来实现的。(个人意见,未证实)   CUBE关键字还有一个极为相似的兄弟ROLLUP, 同样我们先从这英文入手,ROLL UP是“向上卷”的意思,如果说CUBE的组合是绝对自由的,那么ROLLUP的组合就需要有点约束了。我们先来看看SQL Server 2000的联机中对ROLLUP关键字的定义:   指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。   那么这个顺序是什么呢?对了就是Group By 后面字段的顺序,排在靠近Group By的分组字段的级别高,然后是依次递减。如:Group By Column1, Column2, Column3。那么分组级别从高到低的顺序是:Column1 > Column2 > Column3。还是看我们前面的例子,SQL语句中我们仅仅将CUBE关键字替换成ROLLUP关键字,如:   SELECT C_EMPLINFO_DEPTID, C_EMPLINFO_SEX, COUNT(*) AS C_EMPLINFO_TOTALSTAFFNUM   FROM T_PERSONNEL_EMPLINFO   GROUP BY C_EMPLINFO_DEPTID, C_EMPLINFO_SEX WITH ROLLUP   和CUBE相比,返回的数据行数减少了不少。:),仔细看一下,除了正常的Group By语句后,数据中还包含了:   1. 部门员工数;(向上卷了一次,这次先去掉了员工性别的分组限制)   2. 所有部门员工数;(向上又卷了依次,这次去掉了员工所在部门的分组限制)。   在现实的应用中,对于报表的一些统计功能是很有帮助的。   这里还有一个问题需要补充说明一下,如果我们使用ROLLUP或者CUBE关键字,那么将产生一些小计的行,这些行中被剔除在分组因素之外的字段将会被设置为NULL,那么还存在一种情况,比如在作为分组依据的列表中存在可空的行,那么NULL也会被作为一个分组表示出来,所以这里我们就不能仅仅通过NULL来判断是不是小计记录了。下面的例子展示了这里说得到的情况。还是我们前面提到的水果例子,现在我们在每种商品后面增加一个“折扣列”(Discount),用于显示对应商品的折扣,这个数值是可空的,也就是可以通过NULL来表示没有对应的折扣信息。数据集如下所示:   FruitName ProductPlace Price Discount
Apple China $1.1 0.8
Apple Japan $2.1 0.9
Apple USA $2.5 1.0
Orange China $0.8 NULL
Banana China $3.1 NULL
Peach USA $3.0 NULL
 现在我们要统计“各种折扣对应有多少种商品,并总计商品的总数。”,那么我们可以通过如下的SQL语句来完成:   SELECT COUNT(*) AS ProductCount, Discount   FROM T_TEST_FRUITINFO   GROUP BY Discount WITH ROLLUP   好了,运行一下,你会发现数据都正常出来了,按照如上的数据集,结果如下所示:   ProductCount Discount
3 NULL
1 0.8
1 0.9
1 1.0
6 NULL
 好了,各种折扣的商品数量都出来了,但是在显示“没有折扣商品”和“商品小计”的时候判断上确存在问题,因为存在两条Discount为Null的记录。是哪一条呢?通过分析数据我们知道第一条数据(3, Null)应该对应没有折扣商品的数量,而(6,Null)应该对应所有商品的数量。需要判断这两个具有不同意义的Null就需要引入一个聚合函数Grouping。现在我们把语句修改一下,在返回值中使用Grouping函数增加一列返回值,SQL语句如下:   SELECT COUNT(*) AS ProductCount, Discount, GROUPING(Discount) AS Expr1   FROM T_TEST_FRUITINFO   GROUP BY Discount WITH ROLLUP   这个时候,我们再看看运行的结果:   ProductCount Discount Expr1
3 NULL 0
1 0.8 0
1 0.9 0
1 1.0 0
6 NULL 1
 对于根据指定字段Grouping中包含的字段进行小计的记录,这里会标记为1,我们就可以通过这个标记值将小计记录从判断那些由于ROLLUP或者CUBE关键字产生的行。Grouping(column_name)可以带一个参数,Grouping就会去判断对应的字段值的NULL是否是由ROLLUP或者CUBE产生的特殊NULL值,如果是那么就在由Grouping聚合函数产生的新列中将值设置为1。注意Grouping只会检查Column_name对应的NULL来决定是否将值设置为1,而不是完全由此列是否是由ROLLUP或者CUBE关键字自动添加来决定的。   2.2 Group By 和 Having, Where ,Order by语句的执行顺序:   最后要说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:   SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount   FROM T_TEST_FRUITINFO   WHERE (ProductPlace = N'china')   ORDER BY IDE   这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。追问

t1是什么?

追答

子查询 select 学号,avg(成绩)as savg from sc where 成绩=2 作为t1表,区别后面student表中的学号

参考资料:http://baike.baidu.com/view/3483349.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-09
2011年3月计算机等级考试二级VFP笔试:
一、选择题

(1)下列关于栈叙述正确的是

A) 栈顶元素最先能被删除

B)栈顶元素最后才能被删除

C)栈底元素永远不能被删除

D)以上三种说法都不对

(2)下列叙述中正确的是

A)有一个以上根结点的数据结构不一定是非线性结构

B)只有一个根结点的数据结构不一定是线性结构

C)循环链表是非线性结构

D)双向链表是非线性结构

(3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)

A)3

B)4

C)6

D)7

(4)在软件开发中,需求分析阶段产生的主要文档是

A)软件集成测试计划

B)软件详细设计说明书

C) 用户手册

D)软件需求规格说明书

(5)结构化程序所要求的基本结构不包括

A)顺序结构

B)GOTO跳转

C)选择(分支)结构

D)重复(循环)结构

(6)下面描述中错误的是

A) 系统总体结构图支持软件系统的详细设计

B)软件设计是将软件需求转换为软件表示的过程

C)数据结构与数据库设计是软件设计的任务之一

D)PAD图是软件详细设计的表示工具

(7)负责数据库中查询操作的数据库语言是

A)数据定义语言

B)数据管理语言

C)数据操纵语言

D)数据控制语言

(8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是

A)1:1联系

B)1:m联系

C) m:1联系

D) m:n联系

(9)有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是

A)自然连接

B)交

C)除

D)并

(10)定义无符号整数类为UInt,下面可以作为类T实例化值的是

A)-369

B)369

C)0.369

D)整数集合{1,2,3,4,5}

(11)在建立数据库表时给该表指定了主索引,该索引实现了数据完整性中的

A)参照完整性

B)实体完整性

C)域完整性

D)用户定义完整性

(12)执行如下命令的输出结果是

?15%4,15%-4

A)3 -1

B)3 3

C)1 1

D)1 -1

(13)在数据库表中,要求指定字段或表达式不出现重复值,应该建立的索引是

A)惟一索引

B)惟一索引和候选索引

C)惟一索引和主索引

D)主索引和候选索引

(14)给student表增加一个“平均戍绩”字段(数值型,总宽度6} 2位小数)的SQL命令是

A)ALTER TABLE studeni ADD平均成绩N(b,2)

B)ALTER TABLE student ADD平均成绩D(6,2)

C)ALTER TABLE student ADD平均成绩E(6,2)

D)ALTER TABLE student ADD平均成绩Y(6,2)

(15)在Visual FoxPro中,执行SQL的DELETE命令和传统的FoxPro DELETE命令都可以删除数据库表中的记录,下面正确的描述是

A)SQL的DELETE命令删除数据库表中的记录之前,不需要先用USE命令打开表

B)SQL的DELETE命令和传统的FoxPro DELETE命令删除数据库表中的记录之前, 都需要先用命令USE打开表

C)SQL的DELETE命令可以物理地删除数据库表中的记录,而传统的FoxPro DELETE 命令只能逻辑删除数据库表中的记录

D)传统的FoxPro DELETE命令还可以删除其它工作区中打开的数据库表中的记录

(16)在Visual FoxPro中,如果希望跳出SCAN…ENDSCAN循环语句、执行ENDSCAN后面的语句,应使用

A)LOOP语句

B)EXIT语句

C)BREAK语句

D)RETURN语句

(17)在Visual FoxPro中,“表”通常是指

A)表单

B)报表

C)关系数据库中的关系

D)以上都不对

(18)删除student表的“平均成绩”字段的正确SQL命令是

A)DELETE TABLE student DELETE COLUMN平均成绩

B)ALTER TABLE student DELETE COLUMN平均成绩

C)ALTER TABLE student DROP COLUMN平均成绩

D)DELETE TABLE student DROP COLUMN平均成绩

(19)在Visual FoxPro中,关于视图的正确描述是

A)视图也称作窗口

B)视图是一个预先定义好的SQL SELECT语句文件

C)视图是一种用SQL SELECT语句定义的虚拟表

D)视图是一个存储数据的特殊表

(20)从student表删除年龄大于30的记录的正确SQL命令是

A)DELETE FOR年龄>30

B)DELETE FROM student WHERE年龄>30

C)DEL ETE student FOP年龄>30

D)DELETE student WF IERE年龄>30

(21)在Vaual FoxPro中,使用LOCATL FOR }expL>命令按条件查找记录,当查找到满足条件的第一条记录后,如果还需要查找下一条满足条件的记录,应该

A)再次使用LOCATE命令重新查询

B)使用SKIP命令

C)使用CONTINUE命令

D)使用GO命令

(22)为了在报表中打印当前时间,应该插入的控件是

A)文本框控件

B)表达式

C)标签控件

D)域控件

(23)在Visual FoxPro中,假设student表中有40条记录,执行下面的命令后,屏幕显示的结果是

?RECCOUNT()

A)0

B)1

C)40

D)出错

(24)向student表插入一条新记录的正确SQL语句是

A)APPEND INTO student VALUES(’0401’,’王芳’,’女’,18)

B)APPEND student VALUES(’0401’,’王芳’,’女’,18):

C)INSERT INTO student VALUES(’0401’,’王芳’,’女’,18)

D)INSERT student VALUES(’0401’,’王芳’,’女’,18)

(25)在一个空的表单中添加一个选项按钮组控件,该控件可能的默认名称是

A)Optiongroup 1

B)Checkl

C)Spinnerl

D)Listl

(26)恢复系统默认菜单的命令是

A)SET MENU TO DEFAULT

B)SET SYSMENU TO DEFAULT

C)SET SYSTEM MENU TO DEFAULT

D)SET SYSTEM TO DEFAULT

(27)在Visual F’oxPro中,用于设置表单标题的属性是

A)Text

B)Title

C)Lable

D)Caption

(28)消除SQL SELECT查询结果中的重复记录,可采取的方法是

A)通过指定主关键字

B)通过指定惟一索引

C)使用DISTINCT短语

D)使用UNIQUE短语

(29)在设计界面时,为提供多选功能,通常使用的控件是

A)选项按钮组

B)一组复选框

C)编辑框

D)命令按钮组

(30)为了使表单界面中的控件不可用,需将控件的某个属性设置为假,该属性是

A)Default

B)Enabled

C)Use

D)Enuse

第(31)-(35)题使用如下三个数据库表:

学生表:student(学号,姓名,性别,出生日期,院系)

课程表:course(课程号,课程名,学时)

选课成绩表:score(学号,课程号,成绩)

其中出生日期的数据类型为日期型,学时和成绩为数值型,其它均为字符型。

(31)查询“计算机系”学生的学号、姓名、学生所选课程的课程名和成绩,正确的命令是

A)SELECT s.学号,姓名,课程名,成绩

FROM student s, score sc, course c

WHERE s.学号= sc.学号,sc.课程号=c.课程号,院系=’计算机系’

B)SELECT学号,姓名,课程名,成绩

FROM student s, score sc, course c

WHERE s.学号=sc.学号AND sc.课程号=c.课程号AND院系=’计算机系’

C)SELECT s.学号,姓名,课程名,成绩

FROM(student s JOIN score sc ON s.学号=sc.学号).

JOIN course cON sc.课程号=c.课程号

WHERE院系=’计算机系’

D)SELECT学号,姓名,课程名,成绩

FROM(student s JOIN score sc ON s.学号=sc.学号)

JOIN course c ON sc.课程号=c.课程号

WHERE院系=’计算机系’

(32)查询所修课程成绩都大于等于85分的学生的学号和姓名,正确的命令是

A)SELECT学号,姓名FROM student s WHERE NOT EXISTS

(SELECT*FROM score sc WHERE sc.学号=s.学号AND成绩<85)

B)SELECT学号,姓名FROM student s WHERE NOT EXISTS

(SELECT * FROM score sc WHERE sc.学号=s.学号AND成绩>= 85)

C)SELECT学号,姓名FROM student s,score sc

WHERE s.学号=sc.学号AND成绩>= 85

D)SELECT学号,姓名FROM student s,score sc

WHEkE s.学号=sc.学号AND ALL成绩>=85

(33)查询选修课程在5门以上(含5门)的学生的学号、姓名和平均成绩,并按平均成

绩降序排序,正确的命令是

A)SELECT s.学号,姓名,平均成绩FROM student s,score sc

WHEREs.学号=sc.学号

GROUP BY s.学号HAVING COUNT(*)>=5 ORDER BY平均成绩DESC

B)SELECT学号,姓名,AVG(成绩)FROM student s,score sc

WHERE s.学号=sc.学号AND COUNT(*)>=5

GROUP BY学号ORDER BY 3 DESC

C)SELECT s.学号,姓名,AVG(成绩)平均成绩FROM student s,score sc

WHERE s.学号=sc.学号AND COUNT(*)>= 5

GROUP BY s.学号ORDER BY平均成绩DESC

D)SELECT s.学号,姓名,AVG(成绩)平均成绩FROM student s,score sc

WHERE s.学号=sc.学号

GROUP BY s.学号HAVING COUNT(*)>=5 ORDER BY 3 DESC

(34)查询同时选修课程号为C1和C5课程的学生的学号,正确的命令是

A)SELECT学号FROM score sc WHERE课程号=’C 1’AND学号IN

(SELECT学号FROM score sc WHERE课程号=’C5’)

B)SELECT学号FROM score sc WHERE课程号=’C1’AND学号=

(SELECT学号FROM score sc WHERE课程号=’C5’}

C)SELECT学号FROM score sc WHERE课程号=’C 1’ AND课程号=’C5’

D)SELECT学号FROM score sc WHERE课程号=’C 1’OR ’C5’

(35)删除学号为“20091001”且课程号为“C1”的选课记录,正确命令是

A)DELETE FROM score WHERE课程号=’C 1’AND学号=’20091001’

B)DELETE FROM score WHERE课程号=’C 1’OR学号=’20091001’

C)DELETE FORM score WHERE课程号=’C 1’AND学号=’20091001’

D)DELETE score WHERE课程号=’C 1’AND学号=’20091001’

二、填空题

(1)有序线性表能进行二分查找的前提是该线性表必须是存储的。

(2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF则后序遍历结果为。

(3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为测试。

(4)实体完整性约束要求关系数据库中元组的属性值不能为空。

(5)在关系A(S, SN, D)和关系B(D,CN, NM)中,A的主关键字是S, B的主关键字是D,则称是关系A的外码。

(6)表达式EMPTY(.NULL.)的值是。

(7)假设当前表、当前记录的“科目”字段值为“计算机”(字符型),在命令窗口输入如下命令将显示结果。

m=科目-“考试”

?m

(8)在Visual FoxPro中假设有查询文件queryl.qpr,要执行该文件应使用命令。

(9)SQL语句“SELECT TOP 10 PERCENT*FROM订单ORDER BY金额DESC”的查询结果是订单中金额的10%的订单信息。

(10)在表单设计中,关键字表示当前对象所在的表单。

(11)使用SQL的CREATE TABLE语句建立数据库表时,为了说明主关键字应该使用关键词KEY。

(12)在Visual FoxPro中,要想将日期型或日期时间型数据中的年份用4位数字显示,应当使用SET CENTURY命令进行设置。

(13)在建立表间一对多的永久联系时,主表的索引类型必须是。

(14)为将一个表单定义为顶层表单,需要设置的属性是。

(15)在使用报表向导创建报表时,如果数据源包括父表和子表,应该选取报表向导。
第2个回答  推荐于2018-11-18
可以这样写:我已经测试过了:
select student.姓名,avg(sc.成绩)
from student,sc
where student.学号=sc.学号 and 姓名
in
(
select student.姓名 from student,sc
where student.学号=sc.学号 and sc.成绩<60
group by student.姓名
having count(*)>=2
)
group by student.姓名
另外group by的详细资料最好使用sql自带的帮助文档,那里最全的,其他的资料都是从哪盗版过去的,遇到group by问题可以问我的。本回答被网友采纳
第3个回答  2011-05-09
select a.姓名, b.*
from students a,
(select sc.学号, avg(sc.成绩), count(sc.课程号) 不及格数量
from sc
where sc.成绩 < 60
group by sc.学号
having count(sc.课程号) > 1) b
where a.学号 = b.学号
order by a.学号;
第4个回答  2011-05-14
发给你了,祝你考试顺利~
相似回答