单表查询中的GROUP BY子句
求各课程相应选课人数
select Cno,COUNT(Sno)
from SC
GROUP BY Cno;
带有HAVING短语指定筛选条件的查询
select Sno
from SC
GROUP BY Sno
HAVING COUNT(*)>3;
此处是先用GROUP BY子句进行分组,再用聚焦函数COUNT对每一组计数,在此基础上使用HAVING短语进行筛选,因为插入的数据没有满足此条件的,所以结果显示没有。
查询平均成绩达到条件的学生学号与平均成绩
此处因为WHERE子句不能用聚焦函数作为条件表达式,所以报错。
正确的查询语句如下:
select Sno,AVG(Grade)
from SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
因为插入的数据中无满足条件的,所以没有结果截图
WHERE子句与HAVING短语的区别在于作用对象不同,前者作用于基本表或视图选择其中满足条件的元组,后者作用于组,选择其中满足条件的组。
连接查询
等值连接
当连接运算符为=时,称为等值连接,使用其他运算符的称为非等值连接。
查询学生及其选修课程的信息,该查询涉及两个表,此处通过其公共属性Sno来实现
select Student.*,SC.*
from Student,SC
WHERE Student.Sno=SC.Sno;
在本例中,WHERE子句中的属性名都加上了前缀,这是为了避免混淆,如果属性名在参与连接的各表中是唯一的,则可以省略,但在SQL Server中显示结果时前缀不会被显示。
使用自然连接来实现上述例子(在等值连接中吧目标列中重复的属性列去掉则为自然连接):
select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,<