sql serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩

学生表Student(sno,sname,ssex,sage)课程表Lesoon(lno,lname,lcredit)选课表SC(sno,cno,grade)这是我开始写... 学生表Student(sno,sname,ssex,sage)
课程表Lesoon(lno,lname,lcredit)

选课表SC(sno,cno,grade)
这是我开始写的:

if (exists (select * from sys.objects where name = 'proc_stu'))
drop proc proc_stu
go
create proc proc_stu(@sname varchar(8) ='张%')
as
select Student.sno,sname,lname,grade
from Student,SC,Lesson
where Student.sno=SC.sno and SC.lno=Lesson.lno and
sname=@sname
go

由于存在有学生没有选课,所以上面的代码就有问题,参数为没有选课的学生的姓名时,查询结果中就什么都没有。
理想的结果应该是:无论该学生选没选课,结果至少要能有学号和姓名显示,课程名和成绩有就显示,没有就为空
展开
 我来答
gy93108083
2014-11-06 · TA获得超过283个赞
知道小有建树答主
回答量:665
采纳率:50%
帮助的人:276万
展开全部
if (exists (select * from sys.objects where name = 'proc_stu'))
drop proc proc_stu
go
create proc proc_stu(@sname varchar(8) ='张%')
as
select Student.sno,sname,isnull(lname,'') as lname,isnull(grade,0) as grade
from Student left join SC on Student.sno=SC.sno
left join Lesson on SC.lno=Lesson.lno and
where SC.sname=@sname

go
百度网友2dca20d
2014-11-06 · TA获得超过4036个赞
知道大有可为答主
回答量:2638
采纳率:77%
帮助的人:1043万
展开全部
if (exists (select * from sys.objects where name = 'proc_stu'))
drop proc proc_stu
go
create proc proc_stu(@sname varchar(8) ='张%')
as
select Student.sno,sname,lname,grade
from Student left join SC on Student.sno=SC.sno
left join Lesson on SC.lno=Lesson.lno
where sname like @sname
go
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式