/*
语法:order by
用于根据指定的列对结果集进行排序
默认按照asc升序对记录进行排序
降序为desc
*/-- 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)-- 按成绩降序排序SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNERJOIN result r
ON r.studentno = s.studentno
INNERJOIN`subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'ORDERBY StudentResult DESC/*
语法 : SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
好处 : (用户体验,网络传输,查询压力)
推导:
第一页 : limit 0,5
第二页 : limit 5,5
第三页 : limit 10,5
......
第N页 : limit (pageNo-1)*pageSzie,pageSzie
[pageNo:页码,pageSize:单页面显示条数]
*/-- 每页显示5条数据SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNERJOIN result r
ON r.studentno = s.studentno
INNERJOIN`subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'ORDERBY StudentResult DESC, studentno
LIMIT0,5-- 查询 JAVA第一学年 课程成绩前10名并且分数大于80的学生信息(学号,姓名,课程名,分数)SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNERJOIN result r
ON r.studentno = s.studentno
INNERJOIN`subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='JAVA第一学年'ORDERBY StudentResult DESCLIMIT0,10
子查询
/*============== 子查询 ================
什么是子查询?
在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句
嵌套查询可由多个子查询组成,求解的方式是由里及外;
子查询返回的结果一般都是集合,故而建议使用IN关键字;
*/-- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列-- 方法一:使用连接查询SELECT studentno,r.subjectno,StudentResult
FROM result r
INNERJOIN`subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`WHERE subjectname ='数据库结构-1'ORDERBY studentresult DESC;-- 方法二:使用子查询(执行顺序:由里及外)SELECT studentno,subjectno,StudentResult
FROM result
WHERE subjectno=(SELECT subjectno FROM`subject`WHERE subjectname ='数据库结构-1')ORDERBY studentresult DESC;-- 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名-- 方法一:使用连接查询SELECT s.studentno,studentname
FROM student s
INNERJOIN result r
ON s.`StudentNo`= r.`StudentNo`INNERJOIN`subject` sub
ON sub.`SubjectNo`= r.`SubjectNo`WHERE subjectname ='高等数学-2'AND StudentResult>=80-- 方法二:使用连接查询+子查询-- 分数不小于80分的学生的学号和姓名SELECT r.studentno,studentname FROM student s
INNERJOIN result r ON s.`StudentNo`=r.`StudentNo`WHERE StudentResult>=80-- 在上面SQL基础上,添加需求:课程为 高等数学-2SELECT r.studentno,studentname FROM student s
INNERJOIN result r ON s.`StudentNo`=r.`StudentNo`WHERE StudentResult>=80AND subjectno=(SELECT subjectno FROM`subject`WHERE subjectname ='高等数学-2')-- 方法三:使用子查询-- 分步写简单sql语句,然后将其嵌套起来SELECT studentno,studentname FROM student WHERE studentno IN(SELECT studentno FROM result WHERE StudentResult>=80AND subjectno=(SELECT subjectno FROM`subject`WHERE subjectname ='高等数学-2'))/*
练习题目:
查 C语言-1 的前5名学生的成绩信息(学号,姓名,分数)
使用子查询,查询郭靖同学所在的年级名称
*/SELECT studentno,studentname StudentResult
FROM student s INNERJOIN result r ON s.`StudentNO`= r.`StudentNO`WHERE subjectname ='C语言-1'ORDERBY StudentResult DESCLIMIT0,5;SELECT`studentname`,`gradename`FROM student,grade AS g WHERE g.gradeid=(SELECT gradeid FROM`student`WHERE`studentname`='王五');SELECT`studentname`,`gradename`FROM student s
INNERJOIN grade g ON s.`gradeid`= g.`gradeid`WHERE studentname='王五';