这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
今天更一下关系型数据库用到的sql。
SQL 语句结构
- 5. 设计模式之 databasesql与 GORM实践.pdf - 飞书云文档 (feishu.cn) (链接来自字节课程的 ppt(注意版权) )
- (十七)SQL优化篇:如何成为一位写优质SQL语句的绝顶高手! - 掘金 (juejin.cn)
SQL 语句的结构拆分为:| 语句 | 确定含义 | |--------|-------| | Select | 语句 | | From | 表格 | | Where | 选择条件 | | Order By | 排序条件 | | Limit | 上下限条件 | | For | 加锁 |
- 在“语句”和“表”中可以有
as作为别名
以实例分析(一)分组查询
大范围语句套小范围语句 显示的东西写在“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 本就不用显示。