第三节 查 询 (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)
五、对查询结果分组,使用GROUP BY子句分组,细化集函数的作用对象,未对查询结果分组,集函数将作用
于整个查询结果,对查询结果分组后,集函数将分别作用于每个组,使用GROUP BY子句分组。
[例] 求各个课程号及相应的选课人数。
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
结果:
Cno COUNT(Sno)
1 22
2 34
3 44
4 33
5 48
GROUP BY子句的作用对象是查询的中间结果表。分组方法:按指定的一列或多列值分组,值相等的为一
组,使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数。使用HAVING短语筛选最终
输出结果。
[例] 查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。
SELECT Sno, COUNT(*)
FROM SC
WHERE Grade>=90
GROUP BY Sno
HAVING COUNT(*)>=3;
只有满足HAVING短语指定条件的组才输出。HAVING短语与WHERE子句的区别:作用对象不同。WHERE子句
作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。
3.3.3 连接查询,同时涉及多个表的查询称为连接查询,用来连接两个表的条件称为连接条件或连接谓词。
一般格式:
[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
比较运算符:=、>、<、>=、<=、!=
[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>
|