sql语句问题!!!超难!!求高手!!
有三个表,student,course,和sc(成绩表)。其中sc表中的sid是student的主键cid是course表中的主键。sc有自己的主键id.也就是说sid和...
有三个表,student , course , 和 sc (成绩表) 。 其中sc 表中的 sid 是student 的主键
cid 是course 表中的主键。 sc 有自己的主键 id.
也就是说 sid 和cid 是成绩表的外键。
一个学生可以选多门课程,一门课程只有一个成绩。所以说 在确定了学生的id 和课程 id 后,成绩也就知道了。
现在的问题是:请将所有001课程成绩大于002课程成绩的学生学号选出。
也就是说对于某个学生,如果他的001课程 分数高于002课程分数,那么他就在结果集中。
请问sql 语句该如何实现此查询? 跪求sql语句。我弄了一晚上也没搞出来。。。
只搞了一个错误的:select studentid from sc group by studentid having (select score from sc where courseid = '001') > (select score from sc where courseid = '002');
注意:以上 语句是不能运行的。 展开
cid 是course 表中的主键。 sc 有自己的主键 id.
也就是说 sid 和cid 是成绩表的外键。
一个学生可以选多门课程,一门课程只有一个成绩。所以说 在确定了学生的id 和课程 id 后,成绩也就知道了。
现在的问题是:请将所有001课程成绩大于002课程成绩的学生学号选出。
也就是说对于某个学生,如果他的001课程 分数高于002课程分数,那么他就在结果集中。
请问sql 语句该如何实现此查询? 跪求sql语句。我弄了一晚上也没搞出来。。。
只搞了一个错误的:select studentid from sc group by studentid having (select score from sc where courseid = '001') > (select score from sc where courseid = '002');
注意:以上 语句是不能运行的。 展开
4个回答
展开全部
看你的要求来将 , 首先这里的course 课程 和 studen表 是没有用的了。。。
学号,课程号,分数在SC 里。 那么:
select a.studentid from
(select studentid , score from sc where courseid = '001') a
inner join
(select studentid , score from sc where courseid = '002') b
on a.studentid = b.studentid
WHERE a.score> b.score
验证过了 没问题 ! 可以直接使用 !
这里要考虑 考试参加学生情况 而使用 LEFT JOIN / RIGHT JOIN / FULL JOIN 等。。。
学号,课程号,分数在SC 里。 那么:
select a.studentid from
(select studentid , score from sc where courseid = '001') a
inner join
(select studentid , score from sc where courseid = '002') b
on a.studentid = b.studentid
WHERE a.score> b.score
验证过了 没问题 ! 可以直接使用 !
这里要考虑 考试参加学生情况 而使用 LEFT JOIN / RIGHT JOIN / FULL JOIN 等。。。
展开全部
select sid
from(select a.sid,a.score as score1,b.score as score2
(select sid,score from sc where cid='001')a
innerjoin( select sid,score from sc where cid='002')b on a.sid=b.sid
)c
where score1>score2
思想是这样的,你自己调试一下看行不行
from(select a.sid,a.score as score1,b.score as score2
(select sid,score from sc where cid='001')a
innerjoin( select sid,score from sc where cid='002')b on a.sid=b.sid
)c
where score1>score2
思想是这样的,你自己调试一下看行不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select stuNo from student where studentid in (select studentid from sc where id in (select id from sc inner join course on course.id=sc.cid where ((select score from sc where courseid='001')>(select score from sc where courseid='002'))))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--action=请将所有001课程成绩大于002课程成绩的学生学号选出。
drop table student
drop table course
drop table sc
create table student(studentid int ,name varchar(20))
insert into student
select 1,'周杰伦' union
select 2,'蔡依林'
--select * from student
/*
studentid name
1 周杰伦
2 蔡依林
*/
create table course(courseid varchar(3), name varchar(20))
insert into course
select '001','数学' union
select '002','化学' union
select '003','语文' union
select '004','英语'
--select * from course
/*
courseid name
001 数学
002 化学
003 语文
004 英语
*/
create table sc(id int ,studentid int,courseid varchar(3), score int)
insert into sc
select 1,1,'001',56 union
select 2,1,'002',78 union
select 3,1,'003',77 union
select 4,1,'004',88 union
select 5,2,'001',67 union
select 6,2,'002',59 union
select 7,2,'003',99 union
select 8,2,'004',87
--select * from sc
/*
id studentid courseid score
1 1 001 56
2 1 002 78
3 1 003 77
4 1 004 88
5 2 001 67
6 2 002 59
7 2 003 99
8 2 004 87
*/
select studentid,score from sc where courseid='002'
--1.
select a.studentid from
(
select studentid,score from sc where courseid='001'
) a,
(
select studentid,score from sc where courseid='002'
) b
where a.studentid=b.studentid and a.score>b.score
--2.
select studentid from sc
group by studentid
having sum( case when courseid='001' then score else 0 end )>sum( case when courseid='002' then score else 0 end )
--be finished
drop table student
drop table course
drop table sc
create table student(studentid int ,name varchar(20))
insert into student
select 1,'周杰伦' union
select 2,'蔡依林'
--select * from student
/*
studentid name
1 周杰伦
2 蔡依林
*/
create table course(courseid varchar(3), name varchar(20))
insert into course
select '001','数学' union
select '002','化学' union
select '003','语文' union
select '004','英语'
--select * from course
/*
courseid name
001 数学
002 化学
003 语文
004 英语
*/
create table sc(id int ,studentid int,courseid varchar(3), score int)
insert into sc
select 1,1,'001',56 union
select 2,1,'002',78 union
select 3,1,'003',77 union
select 4,1,'004',88 union
select 5,2,'001',67 union
select 6,2,'002',59 union
select 7,2,'003',99 union
select 8,2,'004',87
--select * from sc
/*
id studentid courseid score
1 1 001 56
2 1 002 78
3 1 003 77
4 1 004 88
5 2 001 67
6 2 002 59
7 2 003 99
8 2 004 87
*/
select studentid,score from sc where courseid='002'
--1.
select a.studentid from
(
select studentid,score from sc where courseid='001'
) a,
(
select studentid,score from sc where courseid='002'
) b
where a.studentid=b.studentid and a.score>b.score
--2.
select studentid from sc
group by studentid
having sum( case when courseid='001' then score else 0 end )>sum( case when courseid='002' then score else 0 end )
--be finished
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询