1、顺序要求
2、排序和分页
-- 排序
-- ORDER BY 字段 DESC(降序) ASC(升序)
-- 分页
-- LIMIT x,y x:起始值(从零开始) y:页面大小(每页的行数)
-- 要求:查询高等数学的成绩 前五名排名(姓名,学科,成绩 降序 分页)
select name,subject,s.score
from js_user as u
INNER JOIN js_sub AS s
where subject = '高等数学' and u.id = s.id
ORDER BY score DESC
LIMIT 0,5
+----------+----------+-------+
| name | subject | score |
+----------+----------+-------+
| 姚明 | 高等数学 | 94 |
| 马龙 | 高等数学 | 93 |
| 欧阳国一 | 高等数学 | 92 |
| 刘翔 | 高等数学 | 89 |
| 刘国梁 | 高等数学 | 89 |
+----------+----------+-------+
5 rows in set
3、子查询
-- 要求:高等数学分数不小于90分的同学的基本信息
-
方式一:
select u.id,name,telephone,subject,score from js_user as u INNER JOIN js_sub as s where u.id = s.id and subject = '高等数学' and score >=90 order by score desc; +----+----------+-------------+----------+-------+ | id | name | telephone | subject | score | +----+----------+-------------+----------+-------+ | 2 | 姚明 | 15759960607 | 高等数学 | 94 | | 3 | 马龙 | 15122637229 | 高等数学 | 93 | | 6 | 欧阳国一 | NULL | 高等数学 | 92 | +----+----------+-------------+----------+-------+ 3 rows in set
-
方式二:
select id,name,telephone from js_user where id in (select id from js_sub WHERE score>=90 and `SUBJECT` ='高等数学')
4、分组
-- 分组 group by
-- 给分组设置条件 haveing
-- 要求 查询每一个人的平均成绩 最高分 和 最低分 只看平均分大于90的 并且降序排列
select `name`, AVG(score) AS 平均分, MIN(score) AS 最低分, MAX(score) AS 最高分
from js_sub AS s INNER JOIN js_user AS u on u.id = s.id
-- 按名字分组
GROUP BY `name`
-- 设置条件
HAVING 平均分 >=90
-- 降序
ORDER BY 平均分 DESC;
+----------+---------+--------+--------+
| name | 平均分 | 最低分 | 最高分 |
+----------+---------+--------+--------+
| 马龙 | 93.0000 | 90 | 96 |
| 姚明 | 92.0000 | 89 | 94 |
| 杨国忠 | 91.6667 | 87 | 95 |
| 欧阳国一 | 91.0000 | 89 | 92 |
+----------+---------+--------+--------+
4 rows in set