逻辑处理
在MySQL中,可以使用逻辑运算符和条件语句来进行逻辑处理。
1.逻辑运算符
- and 与
- or 或
- not 非
这里用法与Java中的用法相同,只是语法发生了部分变化。
2.case——when逻辑处理
语法:
case when 条件 then 结果1 else 结果2 end
注意:这里可以有多个when。
这里用力扣中的一道题举例:
这里的答案是:
select r.a as id,case when r.c is null then 'Root'when r.c is not null and r.b = 2 then 'Inner'else 'Leaf' end as type
from (select t.id as a,n.res as b,t.p_id as cfrom Tree t left join (select p_id,count(*) as resfrom Treegroup by p_idhaving p_id is not null) n on t.id = n.p_id
) r;
其中就用到了case对树的节点的连接情况进行了筛选(这是为举例临时做的,做的不好请见谅,可以去力扣官方查看优质题解),这里用到了多表查询,现在这个阶段还不能做,下图是表r,case就是对表r进行了条件处理。
这里需要注意的是,then和else后面是一个值,位置在from前,要会正确使用。
3.ifnull逻辑处理
语法:
ifnull(被检测值,默认值)
函数检测是否为null,如果为null,则返回指定值,否则返回原本的值。
4.if逻辑处理
语法:
if(条件,条件成立的结果,条件失败的结果)
相当于if else的效果。
数学函数
- round(数值):四舍五入;
- ceil(数值):向上取整,返回>=该参数的最大整数;
- floor(数值):向下取整,返回<=该参数的最小整数;
- truncate(数值,保留小数的位数):截断函数,小数点后几位保留,剩下的截断;
- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负;
- rand():获取随机数,返回0~1之间的小数;
日期函数
- now():返回当前系统的日期+时间;
- curdate():返回当前系统日期,不包含时间;
- curtime():返回当前时间,不包含日期;
- 可以获取指定的部分(年、月、日、时、分、秒),参数都是日期列:YEAR()、MONTH()、DAY()、HOUR()、MINUTE()、SECOND(),举例:
SELECT HOUR('2021-01-01 12:30:45'); -- 输出 12,表示 '2021-01-01 12:30:45' 的小时部分是12
-
datediff(bigTime,smallTime):返回两个日期相差的天数;
-
str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期;
-
date_format(日期列,格式):将日期转换成字符串。
日期格式
- %Y:年,4位;
- %m:月,数值(01-12);
- %d:月的天数,数值为(01-31);
- %H:小时,数值为(00-23);
- %i:分钟,数值为(00-59);
- %s:秒,数值为(00-59);
- %f:微秒;
- %T:时间,数值为(hh:mm:ss);
- %j:年的天(001-366);
- %W:周的天;
- %y:年(只有两位);
举例:
-
将日期格式化为年份和月份: SELECT DATE_FORMAT('2022-09-15', '%Y-%m') AS formatted_date; 结果为:'2022-09'
-
将日期格式化为月份和日期: SELECT DATE_FORMAT('2022-09-15', '%M %d') AS formatted_date; 结果为:'September 15'
-
将日期格式化为星期几: SELECT DATE_FORMAT('2022-09-15', '%W') AS formatted_date; 结果为:'Thursday'
-
将时间格式化为小时和分钟: SELECT DATE_FORMAT('12:30:45', '%H:%i') AS formatted_time; 结果为:'12:30'
-
将日期和时间格式化为完整的日期和时间: SELECT DATE_FORMAT('2022-09-15 12:30:45', '%Y-%m-%d %H:%i:%s') AS formatted_datetime; 结果为:'2022-09-15 12:30:45'
分组函数
分组函数用作统计使用,又称为聚合函数或统计函数或组函数。
常用函数:
- sum求和函数;
- avg平局值函数;
- max最大值函数;
- min最小值函数;
- count计数函数;
注意点:
- sum、avg一般用于处理数值型数据,而max、min、count可以处理任何类型数据;
- 以上分组函数都忽略null值;
- count函数的一般使用count(*)用作统计行数;
- 和分组函数一同查询的字段要求是group by后的字段。