日期:2014-05-19  浏览次数:20596 次

关于查询数据时出现的问题。
在数据库中有一个学生信息表(student),一个成绩表(score),一个课程表(course)
我现在想进行如下操作:
1、做查询,显示四列:姓名,学号,课程名称,成绩,

2、   课程表中有几个数据:数学,语文,英语。
        成绩表中有所有学生数学的成绩,其他课程成绩的没有(等待添加)。
        学生表中有所有学生的相关信息

3、做查询时,前三列一定要显示内容,第四列(成绩)有数据的话就显示数据,没
      数据的就显示空。
以上要怎么写查询语句

------解决方案--------------------
表之间关联没有表述明白,假设学生表里有学生id studentid与score表里的sdid关联,
score里有subid与course表里的id关联
select student.姓名,student.学号,course.课程名称,isnull(cast (score.成绩 as varchar(20)), ' ') 成绩 from
student inner join score
on student.studentid=score.sdid
inner join course
on score.subid=course.id

------解决方案--------------------
楼上的不对,表关系应该就是楼上所说的,但是LZ要的结果是把所有的学生信息都罗列出来,又可能存在某个学生只有数学成绩,但是在结果中,这个学生要由三条记录
------解决方案--------------------
构造的一些数据
create table course
(
id int,
课程名称 varchar(255)
)
insert into course
select 1, '数学 ' union all
select 2, '语文 ' union all
select 3, '英语 '
create table student
(
studentid int,
姓名 varchar(255),
学号 varchar(10)
)
insert into student
select 1, '张三 ', '001 ' union all
select 2, '李四 ', '002 '
create table score
(
sdid int,
成绩 int,
subid int
)
insert into score
select 1,80,1 union all
select 1,90,2 union all
select 1,60,3 union all
select 2,70,1


select b.姓名,b.学号,c.课程名称,isnull(cast(d.成绩 as varchar), ' ') 成绩
from
(
select student.studentid,course.id from student cross join course
) a inner join student b on a.studentid=b.studentid
inner join course c on a.id=c.id
left outer join score d on a.studentid=d.sdid and a.id=d.subid
--结果
姓名 学号 课程名称 成绩
--------------------------------------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------------------------------------- ------------------------------
张三 001 数学 80
张三 001 语文 90