# top_sql_100 **Repository Path**: public_static_void/top_sql_100 ## Basic Information - **Project Name**: top_sql_100 - **Description**: 高频 SQL 50 题(基础版)& 高频 SQL 50 题(进阶版) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2024-12-02 - **Last Updated**: 2026-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # top-sql-100 #### 介绍 高频 SQL 50 题(基础版): https://leetcode.cn/studyplan/sql-free-50/ 高频 SQL 50 题(进阶版): https://leetcode.cn/studyplan/sql-premium-50/ #### 写好SQL的一点总结: 一、基础部分 熟悉增删改查的基本语法。 常用的四种关联方式inner join(join)、left join 、right join、full_join的区别和使用场景。 集合运算union(合并并踢重)、union all(仅合并)、minus(差集)、intersect(交集)等。 数据的踢重方式,group by、distinct、row_number的使用。 in 、not in 、exists、not exists的使用。 熟悉常用的字符串函数(拼接、截取、替换、查找等)、日期处理函数(日期格式化、日期偏移、日期运算等)、聚集函数(count、sum、avg、max、min等)。 空值的处理,一定要清楚,是否会有空值或者运算以后是否会产生空值,空值是否需要处理。 ...... 二、高阶部分 公用表表达式with as 的使用,能很好的拆分逻辑。 行转列max(case when ...)、列转行(union all)的使用。 增量场景中merge into的使用, when matched update 、 when not matched insert 复杂查询通常会借助分析函数row_number()、rank()、dense_rank()的区别;sum()over()如何计算累计值;向前向后偏移lag、lead的使用;以及指定窗口范围unbounded、preceding等的使用。 复杂场景下可能会使用递归、递归的一般实现方式是怎样的。 SQL的性能优化有哪些手段、比如索引、分区、分布、裁剪、参数、执行计划、hint、sql拆分、计算均衡等。 ...... 三、SQL整洁之道 统一的编码风格、不一定千篇一律、尽量保持统一。比如关键字大写、表名小写、缩进空格个数等。 当代码很庞大,书写不规范时,借助开发工具进行SQL格式化。 将逻辑比较复杂,可以分段处理,建立临时表或者with表表达式。 SQL的嵌套层数(子查询)不应该超过3层,不利于阅读理解。 字段的命名、表的别名应该见名知意,尤其是上下文很长的时候。 select中的字段要带上表的别名(多表关联),虽然数据库能够识别字段来源于哪张表,但是用户初看是不知道的。 表名通常要指定具体的schema,尤其是来源表的shema不相同时。 删除无用的注释、注释尽量简洁名了。 SQL代码行数不要过长、不利于阅读理解。 表的关联个数不要过多、影响执行计划的准确性。 ......