SQL语句整理| 青训营笔记

97 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
今天更一下关系型数据库用到的sql。

SQL 语句结构

SQL 语句的结构拆分为:| 语句 | 确定含义 | |--------|-------| | Select | 语句 | | From | 表格 | | Where | 选择条件 | | Order By | 排序条件 | | Limit | 上下限条件 | | For | 加锁 |

  • 在“语句”和“表”中可以有 as 作为别名

以实例分析(一)分组查询

大范围语句套小范围语句 显示的东西写在“Select”

user_iduser_nameuser_sexpasswordregister_time
1熊猫66662022-08-14 15:22:01
2竹子12342022-09-14 16:17:44
3子竹43212022-09-16 07:42:21
4黑熊88882022-09-17 23:48:29
8猫熊88882022-09-27 17:22:29
9棕熊03692022-10-17 23:48:29

需求

  • 基于性别字段分组,然后 ID 排序,最后显示各组中的所有姓名,每个姓名之间用  隔开。

拆分需求 基于性别字段分组,然后 ID排序,最后显示各组中的所有姓名,每个姓名之间用 ,隔开。

涉及语句 Select 姓名 + From 表 + Group 性别 + Order By ID

注意点

  1. Select 显示有时需要包括 Group By 或者 Order By 的部分

逐步实现

  1. 基于姓名分组 —— 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() 用分组结果组合选中结果

  1. 根据 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;

将范围更小的套入到范围更大的

  1. 按顺序显示姓名 -- 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 本就不用显示。