Press "Enter" to skip to content

如何学习SQL

如何学习 SQL?

结构化查询语言(SQL)是一种在编程中使用的特定领域语言,旨在多年来管理关系数据库管理系统中保存的数据。它是在上世纪70年代初在IBM开发的。由于关系数据库仍然非常普遍,开发人员仍然需要使用它们。

SQL语言有一些子句,它们是语句和查询的组成部分;表达式可以生成标量值或表格;谓词指定可以计算为SQL三值逻辑的条件;查询根据条件和其他元素检索数据。

那么,问题是如何学习SQL。这里有一些(免费)资源我可以推荐:

  1. SQLBolt – 这是一门完全免费、完全互动的入门课程。所有SQL基础内容都包括编写查询、过滤、连接、聚合以及创建、更新和删除表格。
  2. SQLZoo – 它提供了教程和练习,这对于刚开始学习SQL的人和已经了解SQL但想要进行一些良好的练习来掌握它的程序员都很有帮助。
  3. FreeCodeCamp的SQL教程 – 这个SQL课程已经有超过700万次观看了,我认为这是YouTube上最受欢迎的免费SQL课程。
  4. PopSQL – 是一个令人兴奋的协作SQL查询工具。它可以让多个用户分享查询,将常用查询保存在可搜索的库中,并提供可视化界面进行分析。
  5. Alan Beaulieu的《学习SQL》是一本免费的电子书。 本书提供了有关这门语言的历史和当前用法的有益背景,概述了查询和表格架构,并涵盖了比上述课程更复杂的SQL主题。
  6. 通过玩游戏学习SQL谋杀之谜SQL岛SQL警察局Schemaverse

下面的图片展示了SQL语言的概述

SQL思维导图
SQL思维导图

如果你开始学习SQL,我建议以下学习路径

  • 初学者: SELECT、FROM、WHERE、LEFT/INNER JOIN、GROUP BY、ORDER BY。
  • 中级: HAVING、CASE WHEN、LIKE、IN、UNION (ALL)、TOP/ LIMIT。
  • 高级: WITH AS、PARTITION BY、OVER、LEAD、PIVOT、存储过程和函数。

内连接、左连接、右连接和全连接的区别

  • (INNER) JOIN – 返回两个表中具有匹配值的所有行。
  • LEFT (OUTER) JOIN – 返回左表中的所有行和满足右表条件的行。
  • RIGHT (OUTER) JOIN – 返回右表中的所有行和满足左表条件的行。
  • FULL (OUTER) JOIN – 返回在任一表中具有匹配项的所有行。
不同类型的SQL连接方式的工作原理(来源:Hadley Wickham & Garrett Grolemund的书籍《数据科学的R语言》,由Andreas Martinson制作的备忘单)
不同类型的SQL连接方式的工作原理

SQL查询执行顺序

我们使用SQL查询来访问存储在数据库表中的一系列记录。子句是SQL查询的构建块。必须执行这些子句才能获得正确的结果。SQL查询执行顺序是给定的查询子句如何计算或如何优化数据库搜索结果的名称。

SQL查询执行顺序是指需求如何计算查询子句或如何优化数据库搜索结果。我们按照特定顺序使用子句,就像我们逐步计划某些事情并得出结果一样。

以下是SQL子句执行顺序:

  1. FROM – 连接表以获取基础数据。
  2. WHERE – 过滤基础数据。
  3. GROUP BY – 对过滤后的基础数据进行分组。
  4. HAVING – 过滤分组后的基础数据。
  5. SELECT – 返回最终数据。
  6. ORDER BY – 对最终数据进行排序。
  7. LIMIT – 限制返回的数据行数。
SQL查询执行顺序
SQL查询执行顺序

什么是查询优化器?

优化器的主要功能是通过找到最佳执行计划来确定执行给定SQL查询的最高效方法。查询优化器将SQL查询作为输入,并分析它以确定最佳执行方式。第一步是解析SQL查询并创建语法树。优化器然后分析语法树以确定如何执行查询。

接下来,优化器生成备选的执行计划,这是执行相同查询的不同方法。每个执行计划指定应访问表的顺序、连接方法以及任何过滤或排序操作。优化器根据诸如磁盘读取次数和执行查询所需的CPU时间等因素,为每个执行计划分配一个成本

最后,优化器选择成本最低的执行计划作为查询的最佳执行计划。然后使用此计划来执行查询。

查询处理
查询处理

20条查询优化技巧

以下是我认为值得注意的前20种SQL查询优化技巧的列表:

  1. 为大型表(>1,000,000行)创建索引。
  2. 使用EXIST()而不是COUNT()来查找表中的元素。
  3. **选择字段而不是使用SELECT ***。
  4. 避免在WHERE子句中使用子查询。
  5. 尽可能避免使用SELECT DISTINCT。
  6. 使用WHERE子句而不是HAVING子句。
  7. 使用INNER JOIN创建连接(而不是WHERE)。
  8. 使用LIMIT对查询结果进行采样。
  9. 尽可能使用UNION ALL而不是UNION。
  10. 尽量使用UNION替代WHERE … or …查询。
  11. 在非高峰时间运行查询。
  12. 避免在连接查询中使用OR。
  13. 优先选择使用GROUP BY而不是窗口函数。
  14. 使用派生表和临时表。
  15. 在加载大量数据之前删除索引。
  16. 使用物化视图而不是视图。
  17. 避免使用!=或<>(不等于)运算符。
  18. 尽量减少子查询的数量。
  19. 在可以使用LEFT/RIGHT连接获得相同输出时,尽量少使用INNER连接。
  20. 对于检索相同数据集,经常尝试使用临时源。

工具&资源

  • SQLFlow – 一个很好的可视化SQL查询工具。
SQLFlow
SQLFlow
SQL基础备忘单
SQL基础备忘单

内容由GeekAI网页翻译服务自动翻译完成。 原文地址:https://newsletter.techworld-with-milan.com/p/how-to-learn-sql

发表回复