select 学生表.学号,count(选课表.课程名),avg(成绩表.成绩) from 学生表,选课表,成绩表 where 学生表.学号=成绩表.学号 and 成绩表.课程号=选课表.课程号 group by 学生表.学号 这种写法和你上面有什么区别吗?
没有区别,但是有些时候你上面的方法不如 join 方便。
select a.学号,count(distinct c.课程号),avg(成绩) from 学生表 a left join (成绩表 b join 课程表 c on b.课程号=c.课程号) on a.学号 = b.学号 group by a.学号
select 学号, dbo.getNum01() as [选课门数],dbo.getNum01() as [平均成绩] from 成绩表 create function getNum01(@studentID varchar(200)) returns int as begin declare @n int select @n=count(*) from 成绩表 where 学号=@studentID return @n endcreate function getNum02(@studentID varchar(200)) returns float as begin declare @m float select @n=avg(成绩) from 成绩表 where 学号=@studentID return @m end
from 课程表 a
join 选课表 b on a.id=b.id
join 成绩表 c on b.id=c.id
group by a.学号
http://topic.csdn.net/u/20090331/08/974cf653-f6d8-4a9a-b1f5-bbe633d84383.html
学生表,选课表,成绩表
where 学生表.学号=成绩表.学号 and
成绩表.课程号=选课表.课程号 group by 学生表.学号
这种写法和你上面有什么区别吗?
select a.学号,count(distinct c.课程号),avg(成绩) from 学生表 a left join (成绩表 b join 课程表 c on b.课程号=c.课程号) on a.学号 = b.学号
group by a.学号
select 学号, dbo.getNum01() as [选课门数],dbo.getNum01() as [平均成绩] from 成绩表
create function getNum01(@studentID varchar(200))
returns int
as
begin
declare @n int
select @n=count(*) from 成绩表 where 学号=@studentID
return @n
endcreate function getNum02(@studentID varchar(200))
returns float
as
begin
declare @m float
select @n=avg(成绩) from 成绩表 where 学号=@studentID
return @m
end