GitHub - ben-nour/SQL-tips-and-tricks: SQL 技巧和窍门

这是一份关于 SQL 技巧和窍门的列表,包含格式化/可读性、数据整理、性能、常见错误和杂项等方面的内容:

  • 格式化/可读性

    • 使用前导逗号分隔SELECT子句中的字段,方便识别逗号是否缺失,也可在WHERE子句中使用前导AND
    • WHERE子句中使用虚拟值,方便测试和调整查询,可通过1=1确保查询仍能运行。
    • 缩进代码使其更易读,可遵循公司/团队指南或使用在线格式化工具。
    • 编写复杂查询时考虑使用公共表表达式(CTEs),避免嵌套过多的内联视图。
    • 为代码添加注释,解释为什么做某事,而不是如何做。
  • 数据整理

    • 使用反连接(anti-joins)返回一个表中在另一个表中没有匹配的行,有多种实现方式,不建议使用NOT IN
    • 使用QUALIFY根据窗口函数过滤结果,减少代码行数,但仅在大数据仓库中可用。
    • 可以(但不总是)根据列位置进行GROUP BY,在临时/一次性查询中有用,生产代码应使用列名。
    • 使用GROUP BY ROLLUP创建总计或小计。
    • 使用EXCEPT查找两个表之间的差异,可以与UNION ALL结合使用验证表数据是否相同。
  • 性能

    • 如果列允许NULLNOT EXISTSNOT IN更快,NOT IN在比较值或列时优化不佳,且在有NULL时可能无法按预期工作。
    • 隐式转换可能会使查询变慢或出错,应使用与列相同的数据类型或使用函数进行转换。
  • 常见错误

    • 注意NOT IN在有NULL值时的行为,应使用NOT EXISTS
    • 命名计算字段时避免歧义,可使用唯一别名或在GROUP BY子句中更明确。
    • 当有多个连接时,始终指定列属于哪个表,避免 RDBMS 出错。
  • 杂项

    • 理解 SQL 语句的执行顺序,可参考相关博客文章。
    • 完整阅读文档,避免因不了解函数特性而导致问题,如GREATEST()函数在有NULL时的行为。
    • 使用描述性名称保存查询,便于查找和引用。
阅读 11
0 条评论