1.关键字-limit.
1.1作用一:取前N条数据.
-
limit:限制、限量、边界;
-
语法:select * from 表名 limit 数值;
-
案例:
-
查询级前3条同学信息;
-
查询级年龄最大的三位同学信息。
-
1.2作用二:分页.
-
分页介绍......;
-
语法:select * from 表名 limit a,b;
-
a:代表每页开始条数的上一条数据;
-
b:代表页大小(每页最多展示的数据量)。
-
2.函数介绍.
-
函数类似 Java里面的方法;
-
可以带参数;
-
必须有返回值,且返回值是一行一列;
-
函数可以嵌套到 sql 语句中;
-
函数可以嵌套函数使用,如:round(avg(score),2)。
-
MySQL 包含了大量并且丰富的函数,大概分为如下几类:
-
数值型函数;
-
字符串型函数;
-
日期时间函数;
-
聚合函数等。
-
3.常用函数.
3.1.日期函数.
3.1.1获取当前系统时间.
1).now().
select now();
2).sysdate().
select sysdate();
3.1.2提取指定日期里面的年月日.
1).day().
-
提取指定日期的日期/号;
select day(now());
select day('2022-2-21');
2).month().
-
提取指定日期的月份;
select month(now());
select month('2022-12-21');
3).year().
-
提取指定日期的年份;
select year(now()); select year('2022-12-21');
3.1.3日期转换函数.
1).date_format().
-
格式化指定的日期,将日期转换成指定格式的字符类型日期,date类型和字符串类型的日期都可以转换,format格式的常用时间表示符如下:
-
表示年份:
-
%Y:4位数形式表示年份;
-
%y:两位数形式表示年份,取最后两位数:
-
-
表示月份:
-
%m:以数字形式表示月份;
-
%M:以英文形式表示月份;
-
-
表示日期/号:%d;
-
表示小时:
-
%H:以24小时制表示小时;
-
%h:以12小时制表示小时;
-
-
表示分钟:%i;
-
表示秒: %s,以双位数形式表示秒,如:04;
select date_format(now(),'%Y年%m月%d日') 时间;
select date_format('2017-1-15 21:45:4','%Y年%m月%d日 %H时%i分%s秒') 时间;
2).str_to_date().
-
将字符串类型的日期转换成date类型的日期;
select str_to_date('2022-2-2','%Y-%m-%d');
3.1.4题目练习.
-
在面试题的 tb_student表里面进行查询;
1).查询各学生的年龄,只按年份来算.
分析:
1.不考虑当前时间是否达到生日的月份和日期;
select *,year(now())-year(sage) from tb_student;
2).查询本月过生日的学生.
select * from tb_student wheremonth(now())=month(sage);
3).(自行了解)按照出生日期来算,当前月日 < 出生年月的月日,则年龄减一.
分析:
1.考虑当前的日期是否达到生日的月份,不考虑日期:因为在用当前时间减生日的时候已经把当前时间的一年算到年龄里面了,所以要分析当前时间的月份是否已经达到生日的月份。如果当前的月份达到生日的月份,则年龄不加减,否则-1岁;
select *,year(now())-year(sage)+if(month(now())<month(sage),-1,0) from tb_student;
4).(自行了解)查询下月过生日的学生.
分析:
1.求下个月过生日的学生,直接在当前时间的月份上加1,然后判断相等即可;
2.但是要考虑下如果当前月份是12月份,那么下个月就是1月,这种情况就要做条件判断,即:如果当前的月份加1>1,则赋1,否则就是在当前月份上加1月。
select * from tb_student where if(month(now())+1>12,1,month(now())+1)=month(sage);
3.2字符串函数.
3.2.1大小写转换.
-
upper():转大写:select upper('adfd');
-
lower():转小写:select lower('adfd');
3.2.2uuid().
-
由:数字+字母+四个横杠组成的一个36位的一个随机字符串。
-
select uuid(); 效果如下:
-
0e2597ea-8b41-11ec-86d7-00163e14fcbf
-
3.2.3replace().
-
替换。
-
把 uuid 随机产生的字符串里面的横杠替换成空字符串:
-
select uuid(),replace(uuid(),"-",""); 效果如下:
-
628de16c-8b41-11ec-86d7-00163e14fcbf 628de03a8b4111ec86d700163e14fcbf;
-
-
也可以进行 replace嵌套使用。
3.2.4substring().
-
截取,有如下两种用法:
-
select substring('asdfgh',2,4);
-
从第2个字符开始往后截取4个,包括了第二个字符;
-
-
select substring('asdfgh',2),包括了第二个字符;
-
从第2个开始往后截取所有。
-
3.2.5trim()&length()&char_length.
-
trim():默认去除前后空格:
-
select trim(' sffsd ');
-
trim()函数还有其它作用:去除字符串的指定首字符串、去除字符串的指定首位字符串;
-
-
length():获取字节的个数(mysql默认编码是utf-8,每个汉字占3个字节):
-
select length(trim(' sffs哈 '));
-
-
char_length:获取字符的个数:
-
select char_length(trim(' sffsd '));
-
3.2.6concat().
-
拼接字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个;
-
应用场景:模糊查询、字符串拼接;
-
如:
-
select * from tb_student where sname like concat('%','四','%');
-
select * from tb_student where sname like concat('四','%');
-
select * from tb_student where sname like concat('%','四');
-
select concat('a',1);
-
3.3数值函数.
3.3.1floor().
-
向下取整(没有四舍五入),注意负数情况;
select floor(3.14): 3;
select floor(-3.14): -4;
3.3.2ceil().
-
向上取整(小数位除了纯0情况,其它都往个位数进一),注意负数情况;
select ceil(3.14): 4;
select ceil(-3.14):-3;
2.3.3roundound().
-
四舍五入,也可以指定本保留的小数位数;
select round(3.14): 3;
select round(3.14,3): 3.140;
4.条件判断函数.
-
条件判断函数又称:"流程控制函数";
4.1if().
-
mysql里面的 if函数的作用等同于三元运算符的效果;
-
语法:if(条件, 结果(条件成立), 结果(条件不成立));
-
案例:select if(3>2,'正确','错误') from dual;
4.2ifnull().
-
判断第一个值是否为空,如果不是null,则返回第一个值,否则返回第二个值。和sqlserver里面的 isnull作用一样;
-
语法:ifnull(v1,v2),如果v1不为null,则返回v1,否则返回v2;
-
案例:select ifnull(sname,'无名氏') from tb_sb; 如果字段 sname的值为 null,则赋 '无名氏';
4.3case...when...end.
-
案例:根据字段的值进行判断,并赋予指定的值.;
select *,
case
when cid=01 then '语文'
when cid=02 then '数学'
when cid=03 then '英语'
else '其它'
end 课程名字
from tb_score;
5.合并.
-
前提条件:结果集列数个数相同,列的类型还要相同或是兼容;
-
使用场景:在项目统计报表模块,用来合并数据。
-
union:将所有的查询结果合并到一起,然后去除掉相同的记录,交集;
-
union all:将所有的查询结果合并到一起,不会去除掉系统的记录,并集。
-
案例:
select 'zs',20,now()
union
select 'zs',10,'2022-2-2'
union
select 'ls',10,'2022-2-2';
-
这样三行数据都不会合并,我们来改一下:
select 'zs',20,now() 测试 union select 'zs',10,'2022-2-2' union select 'ls',10,'2022-2-2';
-
这样第二行和第三行数据就会合并成一行,因为列的个数、值、类型都相同。
select 'zs',20,now() 测试
union all
select 'zs',10,'2022-2-2'
union all
select 'zs',10,2022-2-2';
-
这样第二行和第三行不会合并,即使满足合并条件,但是使用的是 union all。
6.给查询的字段取别名.
-
两种方式:空格和as;
-
语法:select 字段名 别名,字段名 as 别名 from 表名。