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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩相关的知识,希望对你有一定的参考价值。

学生表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

由于存在有学生没有选课,所以上面的代码就有问题,参数为没有选课的学生的姓名时,查询结果中就什么都没有。
理想的结果应该是:无论该学生选没选课,结果至少要能有学号和姓名显示,课程名和成绩有就显示,没有就为空

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
参考技术A 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

sql中declare

参考技术A 前面的是参数, 是调用这个存储过程的时候从外部输入进来的。
declare 是声明变量。
比如说,
这个存储过程是,只要你把学号输入进来,
就能查询这个学生的班级。
那么在这个存储过程里面, 学号就是参数。
你给什么学号, 它就返回给你相应的班级。
又或者你也可以做成, 只要你输入学号, 这个存储过程就会将这个学生删除。
反正就是这个意思, 是很基础的东西, 建议你还是看看书把~本回答被提问者采纳

以上是关于sql serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩的主要内容,如果未能解决你的问题,请参考以下文章

第18讲++存储过程

建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程号和分数(表结构如表2,表3)

sql 调用已经建立的存储过程

mysql查询指定姓名的学生的学号,姓名,成绩并将该学生的平均分返回,然后还判断指定的名字存不存在数据库里

sql中declare

SQL Server学习笔记——存储过程