SQL的常见错误有哪些

60次阅读
没有评论

共计 1977 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“SQL 的常见错误有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“SQL 的常见错误有哪些”吧!

1. Queries 语句的执行顺序

SQL 的入门门槛很低。很多人认为会使用 Join, Group By 语句就可以自诩专家了。但是“砖家”们真的知道 SQL 语句的执行顺序吗?

SQL 查询不是以 SELECT 开始的,虽然我们编写代码时,它们在编辑器中是从 Select 开始编写的,但是实际执行却并不是从 SELECT 开始的。

数据库首先使用 FROM 和 JOIN 执行查询,这就是为什么我们可以在 WHERE 中使用合并表中的值。

为什么我们不能在 WHERE 语句中筛选分组 (GROUP BY) 的结果? 因为 GROUP  BY 在 WHERE 之后才会被执行。因此,我们需要通过 HAVING 进行更进一步的条件筛选。

常规情况下,SELECT 是最后执行语句。它决定了查询结果需要输出哪些列,并进行何种聚合运算。此外,WINDOW FUNCTION 在这一步被执行。

这就是为什么当我们尝试在 WHERE 中筛选 WINDOW FUNCTION 的结果时会出现错误。

注意:数据库使用查询优化器来优化查询语句执行。优化器可能会更改某些操作的顺序,以便查询运行得更快。以上的介绍是正对常见情况下,对 SQL 执行幕后所发生事情的笼统的概述。

2. WINDOW FUNCTION 是做什么的?

很多人第一次遇到 WINDOW FUNCTION 时都觉得它似乎很神秘。为什么使用 Window function 作为分组可以聚合数据?

Window Function (WF) 通过特定语句简化了许多操作步骤以方便语句运行:

WF 允许直接访问当前记录前后的数据。参见 LEAD 和 LAG 函数。

WF 可以使用 GROUP BY 对已经聚合的数据执行额外的聚合。见上图中的示例:使用 WF 计算移动累计销售额。

ROW_NUMBER 可以遍历每一行。还可以用来删除重复的记录。或者取一个随机样本。

顾名思义,WF 可以计算给定窗口的统计信息:

上面的 WF 计算的就是从第一个记录到当前记录的累计总和。

Window Function 值得你去专门花时间学习一下基本原理,不然很可能会把查询语句写得过于复杂以至于程序报错。

3. 利用 CASE WHEN 计算平均值

CASE  WHEN 类似于编程语言中的 IF 条件语句。当我们需要对数据的某个子集计算统计信息时,它的作用就显现出来了。

上面的代码计算了在美国销售的产品的平均价格,但是这段代码有一点小问题,也就是对于 Else 的编写是有问题的。

在第一个个语句中,这段代码将所有非美国产品价格设为 0,这降低了总体平均价格。如果有很多非美国产品,平均价格可能接近于 0。

在第二个例子中,它只计算了在美国销售的产品的平均价格,这才是我需要的结果。请注意在这里使用 CASE 时不需要包括 ELSE,因为它默认为 NULL。

请注意在使用 CASE 语句时,一定要小心使用“else 0”。它对 SUM 没有任何影响,但是会对 AVG 平均计算产生巨大影响。

4. 对存在缺失值的列执行 JOIN 语句

SQL 中有 4 种不同的 JOIN: Inner,  Outer, Left 和 Right。当我们在查询中使用 JOIN 时,它默认为 INNER JOIN。

虽然我对 JOIN 有一些研究学习,但是我还是会犯一些小错误。

如上图所示执行 JOIN 语句,结果显示许多记录都丢失了。为什么会这样? 明明是很简单的 JOIN 语句。

真是的原因其实是表 1 和表 2 中 string_field 列存在许多 NULL 值。通常人们会认为 JOIN 会保留 NULL 的记录因为 NULL 等于 NULL,难道不是吗?

然后我运行如下语句:

结果返回的是 NULL。

对于这种情况,为了不丢失有 NULL 的记录,解决方法应该是利用 COALESCE,将 string_field 中的 NULL 转换为空字符串。

但需要注意的是,这样做会将表 1 中每个包含 NULL 的记录与表 2 中每个包含 NULL 的记录全部匹配起来。

通过使用 ROW_NUMBER() 的 WINDOW FUNCTION,我们可以移除这些重复的匹配:

假设该数据表对每一行都有唯一的标识符“某某某 ID”和一个时间戳字段。

只需保留每个标识符的第一行,这样就可以删除重复项。

5. 对于复杂的查询语句不会使用临时表

SQL 的常见错误有哪些

SQL 另外一大优点就是能够调试纠错。

我们可以拆分复杂的查询语句并创建多个临时表。然后可以对这些表运行“完整性检查”,以确保它们包含正确的记录。在设计一个全新且重要的查询或报告时,强烈推荐使用这种方法。

SQL 的常见错误有哪些

临时表的唯一缺点是数据库中的查询优化器无法优化该查询。

当需要保证执行效率时,可以将创建临时表的语句用 with 语句重新定义、查询。

SQL 的常见错误有哪些

到此,相信大家对“SQL 的常见错误有哪些”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计1977字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)