何时使用SQL自然联接而不是联接。。在…上

何时使用SQL自然联接而不是联接。。在…上,sql,Sql,我正在为数据库考试学习SQL,我所看到的SQL就是它在本页上的样子: IEjoin以join On的方式编写,然后编写选择的连接条件。然而,我的教科书和学术机构给我的练习,在它们的例子中只使用自然连接。那么什么时候使用自然连接是正确的呢?如果查询也可以使用join编写,是否应该使用自然联接。。上 感谢您的回答或评论IMO,JOIN-ON语法比自然连接语法更具可读性和可维护性。自然连接是一些旧标准的遗留,我尽量避免这种情况。自然连接会在两个表中找到名称相同的列,并在结果中为找到的每一对添加一列。

我正在为数据库考试学习SQL,我所看到的SQL就是它在本页上的样子:

IE
join
join On
的方式编写,然后编写选择的连接条件。然而,我的教科书和学术机构给我的练习,在它们的例子中只使用自然连接。那么什么时候使用自然连接是正确的呢?如果查询也可以使用join编写,是否应该使用自然联接。。上


感谢您的回答或评论

IMO,JOIN-ON语法比自然连接语法更具可读性和可维护性。自然连接是一些旧标准的遗留,我尽量避免这种情况。

自然连接会在两个表中找到名称相同的列,并在结果中为找到的每一对添加一列。内部联接允许您指定要使用任何列进行的比较。

自然联接将在两个表中找到名称相同的列,并在结果中为找到的每一对添加一列。内部联接允许您指定要使用任何列进行的比较

JOIN关键字用于SQL语句中,根据两个或多个表中某些列之间的关系,从这些表中查询数据

不同连接

*  JOIN: Return rows when there is at least one match in both tables
* LEFT JOIN: Return all rows from the left table, even if there are no matches in the right table
* RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table
* FULL JOIN: Return rows when there is a match in one of the tables
内连接

完全联接

自然连接被认为是一种讨厌的连接,因为它不允许限定键列,这使它变得混乱。因为仅仅通过查看sql语句,您永远不知道使用哪些“公共”列连接两个表。

自然连接匹配表之间的任何共享列名,而内部连接仅匹配给定的on条件

连接通常是可互换的,并且通常产生相同的结果。但是,需要考虑一些重要因素:

  • 如果自然联接没有找到匹配的列,则它将被删除。如果模式不正确,这可能会产生灾难性的结果 被改进的。另一方面,内部联接将返回一个“column” “不存在”错误。这比容错性强得多

  • 带有ON子句的内部联接self documents,导致 向读者描述表架构的更清晰的查询

  • 内部联接会在中生成可维护和可重用的查询 其中的列名可以在 用例或表模式

  • 如果程序员被迫定义ON谓词,他们可以更快地注意到列名不匹配(例如item_ID vs itemID)


否则,对于快速的特殊查询来说,自然连接仍然是一个不错的选择。

一篇关于SQL连接的非常有视觉代表性的文章可能会帮助您了解一种类型的相等连接,这意味着条件只使用相等(
=
)比较。如果您有类似于
。。。在a.amount>b.amount
上联接tblA a,该联接不能表示为自然联接。此外,自然联接将联接它可以联接的所有列。如果不想这样做,并且需要指定要连接的列,请不要使用自然连接。自然连接除了可读性之外还有很多问题。如果你更改了其中一个表,你可能会破坏查询。我同意。感谢您的回答。使用natural join,您的查询将更符合关系代数的要求。非常遗憾的是,SQL没有严格遵循创建它的数学:这是最好的答案,因为它是客观的、理论的,而不仅仅是SQL。这个答案根本没有解决所提出的问题。