select完整语法
group by、having、order by和limit都要按照select语句的语法顺序来写。
排序
语法:order by 字段 升序/降序;
- 升序ASC
- 降序DESC
--查询结果按成绩升序排序
select id,name,score
from student
order by score ASC;
分页
语法:limit 起始值,页面的大小
--查询结果按成绩升序排序,每五个分页
select id,name,score
from student
order by score ASC
limit 0,5;
子查询
语法:在where中嵌套一个子查询语句
查询课程为高数并且成绩大于80分的学生学号和姓名
使用子查询:子查询稍微难理解一点但是语法简洁
select id,name from student where id in (
select id from result where score>80 and subjectId = (
select subjectId from subject where subjectName = '高数'
)
)
使用联表查询:
select s.id name
from student s
inner join result r
on s.id = r.id
inner join subject sub
on r.id = sub.id
where score>80 and subjectName='高数';
分组和过滤
在使用了分组后的过滤中不能使用where,需要使用having,不过他们两个效果是一样的。
--查询不同课程的平均分,最高分,平均分大于80(根据不同的课程分组)
select SubjectName,AVG(score) as 平均分,MAX(score)
from result r
inner join subject sub
on r.SubjectId = sub.SubjectId
group by r.SubjectId
having 平均分>80;