这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
以实例分析(一)分组查询
大范围语句套小范围语句 显示的东西写在“Select”
| user_id | user_name | user_sex | password | register_time |
|---|---|---|---|---|
| 1 | 熊猫 | 女 | 6666 | 2022-08-14 15:22:01 |
| 2 | 竹子 | 男 | 1234 | 2022-09-14 16:17:44 |
| 3 | 子竹 | 男 | 4321 | 2022-09-16 07:42:21 |
| 4 | 黑熊 | 男 | 8888 | 2022-09-17 23:48:29 |
| 8 | 猫熊 | 女 | 8888 | 2022-09-27 17:22:29 |
| 9 | 棕熊 | 男 | 0369 | 2022-10-17 23:48:29 |
需求
- 基于性别字段分组,然后
ID排序,最后显示各组中的所有姓名,每个姓名之间用,隔开。
拆分需求 基于性别字段分组,然后 ID排序,最后显示各组中的所有姓名,每个姓名之间用 ,隔开。
涉及语句 Select 姓名 + From 表 + Group 性别 + Order By ID
注意点
- Select 显示有时需要包括 Group By 或者 Order By 的部分
逐步实现
- 基于姓名分组 —— Group By user_sex
select user_sex as "性别", convert(group_concat(user_id) using utf8) as "ID" from `zz_users` group by user_sex;
group_concat() 用分组结果组合选中结果
- 根据 ID 排序 —— Order By ID
select user_id from zz_users order by user_id desc;
这两步之后的拼接是:取并集
select user_sex as "性别",
convert( group_concat(user_id order by user_id desc separator ",") using utf8) as "ID"
from `zz_users` group by user_sex;
==将范围更小的套入到范围更大的==
- 按顺序显示姓名 -- Select 姓名
select user_sex as "性别",
convert( group_concat(user_name order by user_id desc separator ",") using utf8) as "姓名"
from `zz_users` group by user_sex;
和前面的区别在 user_id 改为 user_name,id 本就不用显示。
以实例分析(二)控制流
都套在 Select 语句中
-- if的用例
select if(user_id > 3,"√","×") from zz_users;
-- ifnull的用例
select ifnull(user_id,"×") from zz_users;
-- case语法1:
case <表达式>
when <值1> then <操作>
when <值2> then <操作>
...
else <操作>
end;
-- 用例:判断当前时间是星期几
select case weekday(now())
when 0 then '星期一'
when 1 then '星期二'
when 2 then '星期三'
when 3 then '星期四'
when 4 then '星期五'
when 5 then '星期六'
else '星期天'
end as "今天是星期几?";
-- case语法2:
case
when <条件1> then <命令>
when <条件2> then <命令>
...
else commands
end;
-- 用例:判断今天是星期几
select case
when weekday(now()) = 0 then '星期一'
when weekday(now()) = 1 then '星期二'
when weekday(now()) = 2 then '星期三'
when weekday(now()) = 3 then '星期四'
when weekday(now()) = 4 then '星期五'
when weekday(now()) = 5 then '星期六'
else '星期天'
end as "今天是星期几?";