Mysql必备技能点
一、SQL顺序
1.sql语句执行顺序:from-->where-->group by -->having --> select--- >distinct--- >order by--- >limit/offset;
- 我们先执行from,join来确定表之间的连接关系,得到初步的数据
- where对数据进行普通的初步的筛选
- group by 分组
- 各组分别执行having中的普通筛选或者聚合函数筛选。
- 然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段
- 将查询结果去重distinct
- 最后合并各组的查询结果,按照order by的条件进行排序
2.sql语句执行顺序:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
二、函数分类
1.单行函数:只对一行数据中的一个字段生效的函数 。
2.聚合函数:不能用在where语句中,需要用在having语句中进行过滤。
三、关键字及函数使用
1. case when 函数
case 字段 when 预期值 then 结果1 else 结果2 end
2. IF 函数
if (表达式,result_true,result_false)
3.IFNULL函数
ifnull (字段,结果)
4.is null 和 is not null
处理值为null的字段的两种常用表达
5.AVG函数
# 计算salary这一列的平均值 avg(salary) # 计算salary这一列非空值的平均值 avg(salary is not null)
6.datediff函数
#第二次登陆与第一次登陆相差一天 datediff(second_date,login_date)=1
7.如果select语句中出现group by,那么聚合函数(如count)就是对分组进行分别计算
8.left函数
# 表明从左至右截取7位,且为2020年2月 where left(start_date,7)='2020-2'
9.文本操作函数
(1)replace
(2)substr
(3)substring_index
(4)trim
eg:对于申请参与比赛的用户,blog_url字段中url字符后的字符串为用户个人博客的用户名,现在运营想要把用户的个人博客用户字段提取出单独记录为一个新的字段,请取出所需数据。
示例:user_submit
device_id |
profile |
blog_url |
2138 | 180cm,75kg,27,male |
http:/ur/bisdgboy777 |
3214 | 165cm,45kg,26,female |
http:/url/dkittycc |
6543 | 178cm,65kg,25,male |
http:/ur/tigaer |
4321 | 171 cm,55kg,23,female |
http:/url/uhksd |
2131 | 168cm,45kg,22,female |
http:/url/sydney |
根据示例,你的查询应返回以下结果:
device_id |
user_name |
2138 | bisdgboy777 |
3214 | dkittycc |
6543 | tigaer |
4321 | uhsksd |
2131 | sydney |
-- 方法1 替换 -- select device_id, replace(blog_url,'http:/url/','') as user_name -- from user_submit; -- 方法2 截取 -- select device_id, substr(blog_url,11,length(blog_url)-10) as user_name -- from user_submit; -- 方法3 删除 -- select device_id, trim('http:/url/' from blog_url) as user_name -- from user_submit; -- 方法4 字段切割 select device_id, substring_index(blog_url,'/',-1) as user_name from user_submit;