注册 登录
编程论坛 SQL Server论坛

[求助]问个问题,大家看看.

nuciewth 发布于 2006-12-20 21:44, 1275 次点击
谢谢各位.

给定
学生表(学号,姓名,性别,年龄,专业).
课程表(课程号,课程名,)
选课(学号,课程号,分数).

查询
1.创建视图显示没有选英语课程的学生姓名.(选了的我会做,但没有选的就不会)
2.创建视图显示学了所有课程的学生姓名
3.创建视图,显示平均分低于80的课程号和平均分.
4.创建视图显示平均年龄大于20的姓名和平均年龄.(每个专业来说).

请大家帮帮我.
17 回复
#2
xrqsjj2006-12-21 09:04

老大。这个你都不会啊,好好看书把

#3
棉花糖ONE2006-12-21 10:30
2.创建视图显示学了所有课程的学生姓名
#4
棉花糖ONE2006-12-21 10:31
除了2有点麻烦,其余的都很简单,去找个例子用两个not exist,或者用连接查询
#5
帅哥一条虫2006-12-21 19:47

唉!
我应该也不懂

#6
chengxiaobo2006-12-21 20:19
呵呵,我也不会的,我没学过这个,现在正准备学这个,如果你不急的话呢,等我学好了,能把你这个问题解决了再来回答你啊,呵呵,不好意思啊
#7
bygg2006-12-21 22:36
置顶的帖子里面有.
#8
nuciewth2006-12-21 23:32
creat view view4(sdept,avgsage)
as
from s
group by sdept
having avg(sage)>20
#9
棉花糖ONE2006-12-21 23:36
以下是引用nuciewth在2006-12-21 23:32:05的发言:
creat view view4(sdept,avgsage)
as
from s
group by sdept
having avg(sage)>20

#10
xu20002006-12-21 23:39

语法都不对。
楼主,我真的想帮你,你在C区帮了那么多人,别人我可以不帮,但你的忙我一定会帮的。可家里电脑没装sql sever2000,我正在下。估计明天才能给你答案。

#11
nuciewth2006-12-21 23:40
以下是引用jinyuzhang在2006-12-21 23:36:29的发言:

可能是我写错题目了.是输出系名.
就是看哪个系的平均年龄是否大于20.

#12
nuciewth2006-12-21 23:42
以下是引用xu2000在2006-12-21 23:39:54的发言:

语法都不对。
语法都不对?不是吧.

#13
nuciewth2006-12-21 23:44
以下是引用xu2000在2006-12-21 23:39:54的发言:


楼主,我真的想帮你,你在C区帮了那么多人,别人我可以不帮,但你的忙我一定会帮的。可家里电脑没装sql sever2000,我正在下。估计明天才能给你答案。

非常感谢你的支持和帮助.
以后请你多教教我啊.
大家多帮帮我啊.谢谢各位.

#14
xu20002006-12-21 23:51
视图的语法不是这样的。
假设有这一个表
create table student
(
sno varchar(3)
primary key,
thename varchar(8),
age int,
dpet varchar(2)
)
go
要创建一个只看thename和dpet的视图的语法为
create view v1
as
select thename,dpet from strudent
go
#15
nuciewth2006-12-21 23:58
是我写错了,丢了点,应该是
creat view view4(sdept,avgsage)
as
select sdept,avg(sage)
from s
group by sdept
having avg(sage)>20
#16
xu20002006-12-22 22:16
我把源码都给你吧
下面是建立表的。
create table student
(
sno varchar(3)
primary key,
thename varchar(8),
sex bit default 0, --0为男,1为女
age int check (age>0),
zy varchar(10) --专业
)
go

create table class
(
cno varchar(3)
primary key,
classname varchar(10)
)
go

create table checkclass
(
sno varchar(3) not null,
cno varchar(3) not null,
primary key(sno,cno),
grade int check(grade>0)
)
go
下面是试验的数据。
insert into class values ('001','English')
insert into class values ('002','Chinese')
insert into class values ('003','Computer')
insert into class values ('004','Math')
insert into student values ('001','王一',0,23,'计算机')
insert into student values ('002','赵二',1,21,'外语')
insert into student values ('003','张三',0,24,'数学')
insert into student values ('004','李四',0,22,'计算机')
insert into student values ('005','刘五',0,26,'物理')
insert into student values ('006','孙六',1,20,'计算机')
insert into checkclass (sno,cno)
select sno,cno from student,class
where sno<>'004' and cno <>'001'
insert into checkclass (sno,cno)
select sno,cno from student,class
where sno='004'
declare ingrade cursor
for select * from checkclass
open ingrade
fetch next from ingrade
while @@FETCH_STATUS = 0
begin
update checkclass set grade=rand()*100
where current of ingrade
fetch next from ingrade
end
下面是我自己做的前三题的答案,如果有不对的地方别笑我呀。

create view noenglish
as
select thename from student where sno not in (select sno from checkclass,class
where checkclass.cno=class.cno and classname='english')
go

create view allcheck
as
select thename from student
where exists
(select sno ,count(cno) from checkclass
group by sno
having count(cno)=(select count(*) from class) and student.sno=checkclass.sno )
go

create view three
as
select cno,avg(grade) from checkclass
group by cno
having avg(grade)>50
go
#17
xu20002006-12-22 22:18
第四题我觉得应该做不出来,姓名是多行的,平均年龄是单行的,怎么可能放在一张表中。
#18
nuciewth2006-12-23 19:32
谢谢帮忙.
1