sql查询没有学生选的课程信息||查询选修了所有课程的学生信息

表dbo.Student

列名数据类型
Stu_idvarchar(10)
Stu_namevarchar(10)
Stu_sexvarchar(2)
Birthdatedatetime
Phonevarchar(8)
Addressvarchar(100)

表dbo.Course

列名数据类型
Course_idvarchar(4)
Course_namevarchar(20)
Course_hourint
Introducevarchar(200)

表dbo.StudentCourse

列名数据类型
Stu_idvarchar(10)
Course_idvarchar(4)
Gradedecimal(9, 2)

问题:查询没有学生选的课程信息
解法一:子查询查找表StudentCourse中被选的课程号;父查询表Course中的课程号不包括子查询结果

SELECT DISTINCT Course.Course_id,Course_name
FROM Course
WHERE Course.Course_id NOT IN(SELECT Course_id FROM StudentCourse)

解法二:这个解法将NOT IN换成了NOT EXISTS

SELECT  DISTINCT Course.Course_id,Course.Course_name
FROM Course
WHERE NOT EXISTS
   (SELECT * FROM StudentCourse WHERE StudentCourse.Course_id=Course.Course_id)

问题:查询选修了所有课程的学生信息。
解法一:1.要确保可以找到学生的全部信息;2.选修了所有课程等于Course表里课都被选
双重否定NOT EXISTS 表示肯定

SELECT *
FROM Student
WHERE NOT EXISTS   -- 没有一个学生能够满足以下条件
  (SELECT * FROM Course WHERE NOT EXISTS   --条件:没有选过course表里的课
      (SELECT * FROM StudentCourse WHERE StudentCourse.Stu_id=Student.Stu_id 
           AND StudentCourse.Course_id=Course.Course_id))   

解法二:若一个学生所选修的课程数与总课程数相同,则这位学生选修了所有课程

SELECT *
FROM Student
WHERE (SELECT COUNT(*)  FROM StudentCourse
WHERE Student.Stu_id=StudentCourse.Stu_id)=(SELECT COUNT(*)  FROM Course)

解法三:使用group by和having子句

SELECT *  
FROM Student           
WHERE Stu_id IN(SELECT Stu_id FROM StudentCourse
GROUP BY Stu_id --根据Stu_id分组,统计每个学生选修了几门课程,若等于Course的总数,就是要找的Stu_id
HAVING COUNT(*)=(SELECT COUNT(*) FROM Course)) --统计course中共有几门课程
  • 30
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值