📜  编写 SQL 连接的 5 个最佳实践

📅  最后修改于: 2022-05-13 01:54:35.453000             🧑  作者: Mango

编写 SQL 连接的 5 个最佳实践

SQL(结构化查询语言)允许我们在关系数据库中的单个表上选择、更新、创建或删除记录。但是,如果我们有两张表,其中包含关于同一个人的不同信息,并且我们想使用所有这些信息将其显示在一张表上怎么办?在这种情况下,我们需要使用 JOIN 子句。 SQL JOIN子句允许我们一次从两个或多个表中获取记录,并根据公共字段检索数据。它还有助于保持我们的数据库规范化。

5-编写 SQL 连接的最佳实践

数据库专业人员使用规范化来提高数据完整性,并保持低数据冗余,以便在删除或更新记录时减少应用程序中数据异常的数量。

了解 SQL 中的连接类型

根据 ANSI 标准 SQL,有五种不同类型的 SQL JOIN:

  • INNER JOIN:此连接返回两个表中具有共同值的记录。
  • LEFT (OUTER) JOIN:这将返回左表中的所有记录以及右表中的匹配记录。如果右表中没有匹配的记录,它将返回 NULL 值。
  • RIGHT (OUTER) JOIN:返回右表的所有记录和左表的匹配记录。如果左表中没有匹配的记录,它将返回 NULL 值。
  • FULL (OUTER) JOIN:它返回左右外连接的组合记录,并返回两个表中的所有行。对于不匹配的记录,最终表将包含 NULL 值。
  • CROSS JOIN:交叉连接通过将第一个表中的每一行与第二个表中的每一行连接起来,返回两个表中行的笛卡尔积。

编写 SQL 连接的 5 个最佳实践:

现在我们知道,从多个表中连接和获取数据的最常用方法是使用 JOIN运算符。但是掌握 JOIN 来编写完美的查询需要大量的努力和实践来解决现实世界的挑战,并且还需要有扎实的技术基础。但是,记住一些重要提示可能会帮助您编写更好的 SQL 连接查询。这里有几个:

1. 使用表别名

别名 是临时自定义名称或表或列名称的简写。别名非常有用,因为它们通过减少所需的输入量来提高查询的可读性和可维护性。别名有两种类型,表别名列别名,其语法如下:

列别名的语法:

表别名的语法:

在查询中使用带有连接的表/列别名始终是一个好习惯,因为随着查询变得复杂,名称也会变得又长又复杂。因此,要创建整洁的查询,使用别名始终是一个好习惯。

2.在使用它们之前了解不同的连接

在开始编写查询之前了解不同的 JOINS 始终是一个好习惯。在应用 JOIN 之前,应该清楚特定查询的预期输出。例如, INNER JOIN子句将仅返回两个表中相同的匹配记录,而LEFT JOIN将返回左表中的所有记录,并且仅返回相应右表中的匹配记录。正确的加入 另一方面,将返回右表中的所有记录以及相应左表中的匹配记录。如果没有匹配的记录,它将返回 NULL 值。如果记住 JOINS 和语法似乎是一项艰巨的任务,那么在编写复杂查询时随身携带一份 SQL 备忘单总是好的。

3. 精心设计JOIN条件

在编写 SQL 查询之前,了解查询应该为您提供什么输出总是很重要的。一个公共列可能无法唯一标识记录,在这种情况下,您可能需要使用两个或多个 JOIN 条件,或者您可能需要使用条件运算符应用非等值连接。因此,有必要先定义正确的 JOIN 条件,然后才能从连接表中获得正确的输出。

4. 使用显式 JOIN 语法

现在您知道了,JOIN 子句用于合并或连接来自两个或多个表的数据;强烈建议使用 JOIN 和 ON 子句来使用Explicit JOINS

显式 JOIN语法有几个好处。通过在 FROM 子句中列出表名并使用 WHERE 子句指定连接条件,您可能会遇到许多使用隐式 JOINS 连接表的 SQL 查询。这造成了很多混乱。因此,要查看 JOIN 条件和过滤条件之间的差异,使用显式 JOIN。当查询中明确说明连接的类型时,更容易理解和预期查询可能带来的输出。所以,最好用“JOIN”来指定要加入的表,用“ON”来指定加入条件。

5. 了解多个 JOINS

一旦您熟悉了编写 JOIN 查询,就该了解多重连接了。在 SQL 中,除了连接两个表之外,您还可以连接三个或更多表,这些表是在多个 JOIN 的帮助下完成的。它允许您连接两个以上的表。

这是一个非常常见的操作,但在编写查询之前需要注意一些规则:每个 JOIN 的条件都写在“ON”子句之后;并且为了增加查询的可读性,将每个 JOIN 放在一个新行上是一个好方法。但是,您应该在使用多个 JOINS 时使用表的逻辑顺序,以便它满足您的数据需求并最小化执行计划的各个运算符之间的数据流。