order by 排序
对SELECT语句查询得到的结果,按某些字段进行排序
与DESC降序或ASC升序搭配使用,默认为ASC升序
演示:

在学号从大到小的基础 上,成绩升序排列

limit
LIMIT [m,]n 或 LIMIT n OFFSET m
限制SELECT返回结果的行数
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
m不指定则偏移量为0,从第一条开始返回前n条记录
offset 起始位置
下标从0开始
LIMIT 常用于分页显示
演示:
假设返回成绩前五名



返回2-6名

子查询
在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
嵌套查询可由多个子查询组成,求解的方式是由里及外
子查询返回的结果一般都是集合,故而建议使用 IN 关键字
查询高等数学-1的所有考试结果(学号 科目编号 成绩) 成绩降序排列
内连接
select stuNo,subNo,score
from result
join subject
on subNo=subjectNo
where subjectName=‘高等数学-1’
order by score desc;

子查询
select stuNo,subNo,score
from result
where subNo in
(select subjectNo from subject where subjectName=‘高等数学-1’)
order by score desc;
select stuNo,subNo,score
from result
where subNo =
(select subjectNo from subject where subjectName=‘高等数学-1’) 只有一个值可以用"="
order by score desc;

子查询执行顺序
由里到外
使用子查询,查询aa同学所在的年级名称
select GradeName from grade where GradeID in (select grade_id from student where stu_name=‘aa’);

mysql函数
数学函数
select abs(-1); 绝对值

select ceiling(9.3); 向上取整,即大于等于我的最小整数

select floor(9.3);向下取整 即小于等于我的最大整数

select rand(); 返回0-1之间的随机数

select sign(9); 符号函数,正数1 负数-1 0返回0

select sqrt(2); 开根号

select power(3,2); m的n次方

select round(4.235,2); 四舍五入保留2位小数


select truncate(4.235,2); 截断保留2位小数

字符串函数
select char_length(‘hello’);返回字符串中包含的字符数

select concat(‘h’,‘e’,‘ll’,‘o’); 合并字符串

select insert(‘hello’,1,3,‘wo’); 替换字符串 从第几个位置开始,替换某个长度
从第一个字符开始,用 wo 替换三个长度

如果起始位置超过了字符串的长度,则返回原字符串
select insert(‘hello’,6,3,‘wo’);

select lower(‘I LOVE you’); 小写

select upper(‘I LOVE you’); 大写

select left(‘i love you’,3);左边截取几个字符
select right(‘i love you’,3);右边截取几个字符

select replace(‘你好,北京欢迎你!’,‘你’,‘你们’); 用 你们 来替换 你

select substr(‘北京欢迎你!’,1,3); 截取 从第几个位置开始截取 截取的长度

select trim(’ 北京 欢迎 你 '); 左右去空格

select reverse(‘北京欢迎你!’); 反转

应用 比如 将姓李的同学 改成姓历
select replace(stu_name,‘李’,‘历’) as 新名字 from student where stu_name like ‘李%’;

日期和时间函数
select current_date(); 获取当前日期
select curdate(); 获取当前日期


select now(); 获取当前日期和时间

select localtime(); 获取当前日期和时间

select sysdate(); 获取当前日期和时间

分别获取日期中的某个部分
select year(now()); select month(now()); select day(now());
select hour(now()); select minute(now()); select second(now());
系统信息函数
select version(); 版本

select user(); 当前用户

统计函数

统计函数返回的就是一个值
count()是非空值的计数

select count(stu_name) from student;

select count(address) from student;

select count(*) from student; 不推荐使用

select count(1) from student; 效率高

GROUP BY分组
使用GROUP BY关键字对查询结果分组
对所有的数据进行分组统计
分组的依据字段可以有多个,并依次分组
与HAVING结合使用,进行分组后的数据筛选
查询不同课程的平均分 最高分 最低分
根据不同的课程进行分组
select subNo,avg(score),max(score),min(score) from result
group by subNo;

select subjectName,avg(score),max(score),min(score) from result
join subject on subNo=subjectNo
group by subNo;

查询平均分大于70的科目
select subjectName,avg(score),max(score),min(score) from result
join subject on subNo=subjectNo
group by subNo
having avg(score)>65;

在此基础上再按平均分升序排列
select subjectName,avg(score),max(score),min(score) from result
join subject on subNo=subjectNo
group by subNo
having avg(score)>65
order by avg(score) asc;

在此基础上,只显示第一条
select subjectName,avg(score),max(score),min(score) from result
join subject on subNo=subjectNo
group by subNo
having avg(score)>65
order by avg(score) asc
limit 1 offset 0;

针对group by 用法和原理的介绍
https://blog.youkuaiyun.com/weixin_42724467/article/details/89378526
本文详细介绍了MySQL的多种操作。包括使用order by进行排序,搭配DESC或ASC;用limit限制返回结果行数,常用于分页;子查询在WHERE条件中嵌套查询;介绍了数学、字符串、日期和时间、系统信息、统计等多种MySQL函数;还讲解了GROUP BY分组,可结合HAVING筛选数据。

被折叠的 条评论
为什么被折叠?



