查询所有已经毕业了的学生信息

查询所以已经毕业了的学生的信息。
查询某个班级的所以学生的姓名和成绩。

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7475952
  • 这篇博客也不错, 你可以看下查询每个班级成绩排名前五的学生及成绩
  • 除此之外, 这篇博客: 查询选修了全部课程的学生的信息中的 查询选修了全部课程的学生的信息 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #表结构
    --1.学生表
    student(Sno,Sname,Ssex,Sage,Sdept)  # Sno 学号,Sname 姓名,Ssex 性别,Sage 年龄,Sdept 系别
    --2.课程表
    course(Cno,Cname,Cpno,Ccredit) 		# Cno 课程编号,Cname 课程名称,Cpno 先行课,Ccredit 学分
    --3.成绩表
    sc(Sno,Cno,Grade) 			    	# Sno 学号,Cno 课程编号,Grade 分数
    

    补充知识:

    EXISTS (相当于存在量词)

    (1)带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true"或逻辑假值”false“。

    • 若内层查询结果非空,则外层的WHERE子句返回真值(true)
    • 若内层查询结果为空,则外层的WHERE子句返回假值(false)

    (2)由EXISTS引出的子查询,其目标列表达式通常都用 * ,因为带EXISTS的子查询只返回真值或 假值,给出列名无实际意义。

    NOT EXISTS

    • 若内层查询结果非空,则外层的WHERE子句返回假值(false)
    • 若内层查询结果为空,则外层的WHERE子句返回真值(true)

    EXISTS的执行顺序为

    1、首先执行一次外部查询

    2、对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。

    3、使用子查询的结果来确定外查询的结果集。如果EXISTS或NOT EXISTS返回true,则这一行的数据(比如下面例子中,这一行的数据代表取出的一个学生的姓名)作为外查询的结果行,否则不能作为结果。

    方法一:

    选修了全部课程的同学,即不存在一门课程,该学生没有选到。

    #查询选修了全部课程的学生的学号、姓名
    SELECT `Sno`,`Sname`		#取出一个学生的信息(在student表中循环取学生的信息)
    FROM student
    WHERE NOT EXISTS(			#不存在课程(在course中循环取所有课程的信息)
    	SELECT *
    	FROM course
    	WHERE NOT EXISTS(		#该学生没有选修
    		SELECT *
    		FROM sc
    		WHERE sc.`Sno`=student.`Sno`
    		AND sc.`Con`=course.`Cno`
    		)
    	)
    

    在这里插入图片描述

    方法二:

    选修了全部课程的同学,该学生选修课的门数等于所有课程的门数

    #查询选修了全部课程的学生的学号、姓名
    SELECT s.`Sno`,s.`Sname`
    FROM student s
    WHERE s.`Sno` IN(
    	SELECT c.`Sno`
    	FROM sc c
    	GROUP BY c.`Sno`
    	HAVING COUNT(*)=(		#该学生的选修的课程门数=所有课程的门数
    		SELECT COUNT(*)		#所有课程的门数
    		FROM course
    		)
    	)
    

    以上是个人在学习过程中的一些理解和记录,如有错误,欢迎指正批评~~~
    参考文章:https://blog.csdn.net/yangmingsen1999/article/details/82459939
    https://blog.csdn.net/run65536/article/details/80679313
    https://blog.csdn.net/qmilumilu/article/details/104866622

  • 您还可以看一下 李立宗老师的讲给入门者的深度学习课程中的 参数的重要性小节, 巩固相关知识点