常用MySQL(二)
case when
Case具有两种格式。简单Case函数和Case搜索函数
-
第一种 格式 : 简单Case函数
# 选项1,2...作为条件值1,2...的新值
case 列名
when 条件值1 then 选项1
when 条件值2 then 选项2.......
else 默认选项
end as 新列名
# 结合select使用
select case 列名
when 条件值1 then 选项1
when 条件值2 then 选项2...
else 默认选项
end as 新列名
from table_name
-
第二种 格式 :Case搜索函数
# 条件1,2...一般是某列值的比较条件,如 colA=1 或 colA!=1 或 colA>1 and colA<5
# 选项1,2...作为条件1,2...的新值
case
when 条件1 then 选项1
when 条件2 then 选项2.......
else 默认选项
end as 新列名
# 结合select使用
select case
when 条件1 then 选项1
when 条件2 then 选项2.......
else 默认选项
end as 新列名
from table_name
常用函数
时间函数
#昨天
SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS( 时间字段名) <= 1
#7天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
#近30天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
#本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE(), '%Y%m' )
#上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
其他函数
length --计算字符串长度
concat --连接两个字符串
substring -- 截取字符串
count -- 统计数量
max -- 最大 min -- 最小 sum -- 合计
drop、truncate、delete
drop table
-
1)属于DDL
-
2)不可回滚
-
3)不可带where
-
4)表内容和结构删除
-
5)删除速度快
truncate table
-
1)属于DDL
-
2)不可回滚
-
3)不可带where
-
4)表内容删除
-
5)删除速度快
delete from
-
1)属于DML
-
2)可回滚
-
3)可带where
-
4)表结构在,表内容要看where执行的情况
-
5)删除速度慢,需要逐行删除
使用场景
-
不再需要一张表的时候,用drop
-
想删除部分数据行时候,用delete,并且带上where子句
-
保留表而删除所有数据的时候用truncate
explain
通过explain
命令我们可以学习到该条SQL是如何执行的,随后解析explain的结果可以帮助我们使用更好的索引,最终来优化它