Mysql 高级查询之EXISTS

检查“Logic Java”课程最近一次考试成绩
如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数

SELECT sujectNo FROM `subjectl` WHERE subjectName='Logic Java'
SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM`subject` WHERE subjectName='Logic Java')
SELECT studentNO,studentResult
FROM result
WHERE EXISTS(
 SELECT * FROM result
 WHERE studentResult>80
 AND subjectNo=(SELECT subjectNO FROM `subject` WHERE subjectName='Logic Java')
 AND  examDate=(
  SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
)
AND subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java')
AND  examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
ORDER BY studentResult DESC
LIMIT 5

检查“Logic Java”课程最近一次考试成绩
如果全部未通过考试(60分及格),认为本次考试偏难,计算的该次考试平均分加5分

SELECT  AVG(studentResult)+5
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))
AND NOT EXISTS(
 SELECT * FROM result
 WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')
 AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))
 AND studentResult>100
)

/*
为每个学生制作在校期间每门课程的成绩单,要求每个学生参加每门课程的最后一次考试成绩作为该生本课程的最终成绩
成绩单的数据项
学生姓名
课程所属的年级名称
课程名称
考试日期
考试成绩
父查询的列与子查询的列相关联--》相关子查询的机制
父查询执行一条 子查询执行一遍
无关子查询 子查询优先执行 返回的结果作为父查询条件/表结构

*/
SELECT studentName,r.subjectNo,subjectName,examDate,studentResult
FROM student AS s
INNER JOIN result AS r ON r.studentNo=s.studentNO
INNER JOIN SUBJECT AS sub ON sub.subjectNo = r.subjectNo
WHERE examDate=(
 
 SELECT MAX(examDate) FROM result
 WHERE studentNo=s.studentNO AND subjectNo=sub.subjectNo
)


SELECT subjectNo,AVG(studentResult) AS'平均分'
FROM result
GROUP BY sudjectNo #GROUP BY: 分组
HAVING 平均分 >=60
GROUP BY 平均分 DESC
SELECT gradeID,sex,COUNT(*) FROM student
GROUP BY gradeID,sex
SELECT YEAR(borndate),COUNT(*) FROM student
GROUP BY YEAR(borndate)
UPDATE student SET sex='男' WHERE (studentNo%2)=0

查询学生的考试成绩

内连

SELECT studentName,s.subjectNo,studentReult,gradeName,subjectName
FROM student AS s
INNER JOIN result AS r ON r.studentNo = s.studentNo
INNER JOIN `subject` AS sub ON r.subjectNo=sub.subjectNo
INNER JOIN grade AS g ON g.gradeid=s.gradeid
直连
SELECT studentName,gradeName,sub.subjectNo,subjectName,studentResult
FROM student AS s, result AS r,`subject` AS sub,grade AS g
WHERE r.studentNo = s.studentNo
AND r.subjectNo=sub.subjectNo
AND g.gradeid=s.gradeid

猜你喜欢

转载自blog.csdn.net/angelayouran/article/details/80866805