记录一下 自己不擅长的两个sql题

查询“001”课程比“002”课程成绩高的所有学生的学号

//结题思路  同一个学生 学习课程001和学习课程002 成绩的比较

那么怎么固定成同一个学生呢

首先 我们可以很简单 的查询出来 课程等于001学生 的学号 和 课程等于002学生的学号

接下来 怎么固定是同一个学生呢  

select stuid from student  查询出来所有学生的id  然后stuid 等于课程001的学生id 同时也登陆课程002的学生id

具体查询:

SELECT tblstudent.StuId
from tblstudent
where
(SELECT TC.Score FROM tblscore TC WHERE TC.CourseId='001'and tblstudent.StuId=tc.StuId)
”>
(SELECT tb.Score FROM tblscore Tb WHERE Tb.CourseId='002' and tblstudent.StuId=Tb.StuId)

第二个:查询学过叶平老师所教的所有课程的同学的学号,姓名

我们很容易 就能根据叶平查询到教师号 根据教师号查询到课程号

然后呢 我们密码了 怎么查

————————————————

其实我们可以换一种思路 我们先查询出来 所有学过叶平老师课程的学生也包括学历一门课程的人

我们查询出来课程号 我们就能查出学号  select 学号 from score  where 课程号 in(......里面是上面查询到的课程号) 这个时候我们就查询出来所有的学号了 然后我们想查询出来那些学生都学了  我们是不是可以换个思路思考一下  比如这个老师一共教了两门课

我们这个是时候是不是可以按学号分组 count(学号) 然后where count(学号)=2

查询出来这个老师一共教了几门课就不多说了

直接上sql

SELECT 学号,COUNT(课程号) from score where 课程号 in(
SELECT 课程号 from course WHERE 教师号=(
SELECT 教师号 from teacher WHERE 教师名称='孟扎扎'))
GROUP BY 学号
HAVING COUNT(课程号) =(
SELECT COUNT(课程号)课程号 from course WHERE 教师号=(
SELECT 教师号 from teacher WHERE 教师名称='孟扎扎'))

查询课程002比001成绩低的学生


SELECT * from student st where( 
(select 成绩 from score s1 where `课程号` ='0002'AND st.学号 = s1.学号)>
(select 成绩 from score s2 where `课程号` ='0001' AND st.学号 = s2.学号))

/*查询没有学全所有课程的同学的学号 我们可以先查询学全的学号*/
/*我们先查询课程的总数*/
SELECT COUNT(*) from course
/*按学生分组查询所学课程的总数*/
select 学号,COUNT(课程号) from score 
GROUP BY 学号
/*然后等于课程总数就行*/
HAVING COUNT(课程号) =(SELECT COUNT(*) from course)
/*然后查询名称 两种方法 一种是in 一种是右连接*/
SELECT 姓名,学号 FROM student where 学号 in(select 学号 from score 
GROUP BY 学号
/*然后等于课程总数就行*/
HAVING COUNT(课程号) =(SELECT COUNT(*) from course))
/*最好查出出来没有学全的学生*/
SELECT 姓名,学号 FROM student where 学号 not/*这个地方直接加not就行*/ in(select 学号 from score 
GROUP BY 学号
/*然后等于课程总数就行*/
HAVING COUNT(课程号) =(SELECT COUNT(*) from course))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值