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.csdn.net/weixin_42724467/article/details/89378526