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
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-06
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

建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程...
建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程号和分数(表结构如表2,表3) 表2 student字段名 类型 长度 说明学号 字符 9 学号姓名 字符 8 姓名姓名 字符 2 性别班级 字符 4 系别出生日期 日期 8 出生日期表3 成绩表字段名 类型 长度 说明学号 字符 9 课程号 字符 4 成绩 整型 wu...

实验六使用T-SQL编写存储过程访问数据库
三实验内容和要求建立学生-课程数据库,其中包含学生表Student(Sno,Sname,Ssex,Sage,Sdept)、课程表:Course(Cno,Cname,Cpno,Ccredit)和学生选课表:SC(Sno,Cno,Grade);编写相应的存储过程,完成下面的功能:(1)编写一个存储过程,可以查询指定系的学生的选课信息,列出学号、姓名、所在系、课程名和...

创建一个触发器,当修改学生课程成绩时,自动将相关信息写入GradeChange...
1、创建一个带有输入参数和输出的存储过程p_kh,返回指定教师(作为输入参数)所授课程的课程号(作为输出参数)。2、创建并执行带输入和输出参数的存储过程p_cj3,查询指定学号(输入参数)学生所选课程的课程名和成绩(输出参数),调用存储过程后,显示“XX学号选修的课程名为《XX》,其成绩是:XX”。3、分...

请问有谁知道2011年3月的全国计算机四级数据库工程师考试题型和以前的还...
(27)在SQL Server 2000中,设有课程表(课程号,课程名,学分,开课学期),现要在此关系表上建立一个查询指定学期开设的课程总门数和总学分数的内嵌表值函数,函数名为f _FindTotal。实现这个函数的正确代码是 A)CREATE FUNCTION f_FindTotal(@semester int) RETURNS table AS RETURN( SELECT COUNT(课程号)as课程...

sql中操作数应包含一列是什么意思
返回多列了,课程名,成绩。自定义函数只允许返回一列,可以用存储过程,但这种简单查询没必要

...数据库系统工程师 下午考卷) 1到9题用SQL SERVE 2005做,求高手...
以下是创建部分关系表的SQL语句,请将空缺部分补充完整。CREATE TABLE 客户(客户号CHAR(5)___(a)___姓名CHAR(30),性别CHAR(2)___(b)___地址CHAR(30),邮编CHAR(6));CREATE TABLE 订单(订单号CHAR(4),时间 CHAR(10),金额 NUMBER(6,2),客户号 CHAR(5) NOT NULL,PRIMARY KEY(订单号...

相似回答