我经常确切地知道我想要什么,并且知道表是如何关联的以便获得它,但是当涉及到连接时,我很难将文字语言知识翻译成 SQL 语法。您有什么可以分享的在过去对您有用的提示或技巧吗?
这是一个基本但很糟糕的例子:
“我有类别,有一对多的产品,有一对多的变体,有一对多的来源。我需要属于类别 XYZ 的所有来源。”
我想象做一些你划掉某些语言术语并用 SQL 语法替换它们的事情。您能分享一下您是如何根据类似的概念来制定查询的吗?谢谢!
最佳答案
在你尝试之前,你不会注意到它有多么迷人。
JOIN
s。 Include
形状)也是学习它的好方法。 内连接 - 匹配
INNER JOIN
中指定的两个表之间的行基于具有匹配数据的一列或多列的语句。优选地,联接基于强制执行表之间的关系的参照完整性以确保数据完整性。只是对上面的基本定义添加一点评论,一般来说
INNER JOIN
选项被认为是应用程序和/或查询中所需的最常见的连接。尽管在某些环境中是这种情况,但它实际上取决于应用程序所需的数据库设计、参照完整性和数据。因此,请花时间了解所请求的数据,然后选择正确的连接选项。尽管大多数连接逻辑基于指定的两列之间的匹配值,但也可以包含使用大于、小于、不等于等的逻辑。
左外连接 - 基于join 子句中指定的两个表,所有数据从左表返回。在右表中,除了
NULL
之外,还返回了匹配的数据。记录存在于左表中但不存在于右表中的值。要记住的另一项是
LEFT
和 RIGHT OUTER JOIN
逻辑是相反的。因此,您可以更改特定连接语句中表的顺序或更改 JOIN
从左到右,反之亦然,得到相同的结果。右外连接 - 基于join 子句中指定的两个表,所有数据都从右表返回。左表除了
NULL
还返回匹配的数据记录存在于右表但不存在于左表的值。自助加入 - 在这种情况下,为了匹配同一个表中的数据,同一个表用两个不同的别名指定了两次。
交叉连接 - 基于连接子句中指定的两个表,如果
WHERE
,则创建笛卡尔积。子句确实过滤了行。笛卡尔积的大小基于左表中的行数乘以右表中的行数。使用 CROSS JOIN
时请注意.全员加盟 - 基于连接子句中指定的两个表,无论匹配的数据如何,都将从两个表中返回所有数据。
关于sql - 将 sql 连接从文字语言转换为 SQL 语法的提示或技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744111/