要求:
查询所有学生信息(数学成绩比语文成绩高)
表格信息
表架构
表1:student
表2:course
表3:studeng_course
解题思路
查询逻辑流程图
1.查询数学和语文id
数学和语文的id位于course表中,所以要到course表中查询
select id from course where name='数学';
select id from course where name='语文';
2.查询学生id和对应课程分数
根据上面查到的id,到student_course表中查询语文和数学的学生id以及语文成绩、数学成绩
-- 查询选课语文的学生信息和分数
select * from student_course
where course_id =(select id from course where name='语文')
-- 查询选课语文的学生信息和分数
select * from student_course
where course_id=(select id from course where name='数学')
**查询结果:**
3.查询满足条件的学生信息
根据tempChinese, tempMath和student三个表去查询满足数学成绩比语文成绩高的学生信息,此处代码不可能一次写完,下面我分几个步骤(答案是第三步)
第一步:查询满足学生id都一样,以及数学成绩>语文成绩
select * from
student,
tempChinese,
tempMath
where student.id=tempChinese.student_id -- student表中学生id=tempChinese表中的学生id
and tempChinese.student_id=tempMath.student_id -- tempChinese表中学生id=tempMath表中学生id
and tempMath.score>tempChinese.score --数学成绩>语文成绩
第二步:将上面代码的别名表用代码赋值
select * from
student,
(select * from student_course
where course_id =(select id from course where name='语文'))as tempChinese,
(select * from student_course
where course_id=(select id from course where name='数学'))as tempMath
where student.id=tempChinese.student_id
and tempChinese.student_id=tempMath.student_id
and tempMath.score>tempChinese.score
查询结果:
第三步:上面的查询结果,不方面阅读,我们需要在select 后面的*号改成我们需要的信息(学生信息,数学成绩,语文成绩)
下面代码中student.* 的意思是student中所有字段
select student.* , tempMath.score as 数学, tempChinese.score as 语文 from
student,
(select * from student_course
where course_id =(select id from course where name='语文'))as tempChinese,
(select * from student_course
where course_id=(select id from course where name='数学'))as tempMath
where student.id=tempChinese.student_id
and tempChinese.student_id=tempMath.student_id
and tempMath.score>tempChinese.score