sql - 将 sql 连接从文字语言转换为 SQL 语法的提示或技巧?

标签 sql join

我经常确切地知道我想要什么,并且知道表是如何关联的以便获得它,但是当涉及到连接时,我很难将文字语言知识翻译成 SQL 语法。您有什么可以分享的在过去对您有用的提示或技巧吗?

这是一个基本但很糟糕的例子:

“我有类别,有一对多的产品,有一对多的变体,有一对多的来源。我需要属于类别 XYZ 的所有来源。”

我想象做一些你划掉某些语言术语并用 SQL 语法替换它们的事情。您能分享一下您是如何根据类似的概念来制定查询的吗?谢谢!

最佳答案

  • 使用 SQL Query Designer 从那里的可视化表集合中轻松构建 Join 查询,然后如果您想了解它的工作原理,只需调查它,这就是我学习的方式。
    在你尝试之前,你不会注意到它有多么迷人。
  • Visual Representation of SQL Joins - 解释 SQL 的演练 JOIN s。
  • Complete ref of SQL-Server Join, Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, in SQL-Server 2005 (查看下面的快照)。
  • ToTraceString Entity Frameork 的 ObjectQuery(您添加 Include 形状)也是学习它的好方法。
  • SQL-Server Join types (with detailed examples for each join type) :
    内连接 - 匹配 INNER JOIN 中指定的两个表之间的行基于具有匹配数据的一列或多列的语句。优选地,联接基于强制执行表之间的关系的参照完整性以确保数据完整性。
    只是对上面的基本定义添加一点评论,一般来说INNER JOIN选项被认为是应用程序和/或查询中所需的最常见的连接。尽管在某些环境中是这种情况,但它实际上取决于应用程序所需的数据库设计、参照完整性和数据。因此,请花时间了解所请求的数据,然后选择正确的连接选项。
    尽管大多数连接逻辑基于指定的两列之间的匹配值,但也可以包含使用大于、小于、不等于等的逻辑。
    左外连接 - 基于join 子句中指定的两个表,所有数据从左表返回。在右表中,除了NULL之外,还返回了匹配的数据。记录存在于左表中但不存在于右表中的值。
    要记住的另一项是 LEFTRIGHT OUTER JOIN逻辑是相反的。因此,您可以更改特定连接语句中表的顺序或更改 JOIN从左到右,反之亦然,得到相同的结果。
    右外连接 - 基于join 子句中指定的两个表,所有数据都从右表返回。左表除了NULL还返回匹配的数据记录存在于右表但不存在于左表的值。
    自助加入 - 在这种情况下,为了匹配同一个表中的数据,同一个表用两个不同的别名指定了两次。
    交叉连接 - 基于连接子句中指定的两个表,如果 WHERE,则创建笛卡尔积。子句确实过滤了行。笛卡尔积的大小基于左表中的行数乘以右表中的行数。使用 CROSS JOIN 时请注意.
    全员加盟 - 基于连接子句中指定的两个表,无论匹配的数据如何,都将从两个表中返回所有数据。

  • SQL Query designer sample

    关于sql - 将 sql 连接从文字语言转换为 SQL 语法的提示或技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744111/

    相关文章:

    sql - 如何基于字段的子字符串值联接两个表?

    mysql - 对多个表的结果进行分组

    mysql - 创建临时表运行了 30 分钟但未完成

    sql - 最有效的检索sql

    MySQL View - 非法混合排序规则

    php - 如何在不同的表中查看页面是否处于事件状态?

    php - 如何使用codeigniter join函数从同一个表获取两个id数据

    sql - 使用单个查询更新多个表列值

    基于 ID 匹配从一个表到另一个表的 SQL 更新

    python - 如何使用 session 或引擎使用原始 SQL 进行查询