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

时间:2009-11-16 18:53:23

标签: sql join

我经常确切地知道我想要什么,并且知道表格是如何相关的才能得到它,但是当谈到连接时,我真的很难将字面语言知识转换为SQL语法。你有什么提示或技巧可以分享过去曾为你效用过吗?

这是一个基本但不好的例子:

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

我想要做一些事情,你可以跨越某些语言术语并用SQL语法替换它们。您能否根据类似的概念分享您如何制定查询?谢谢!

6 个答案:

答案 0 :(得分:6)

  • 使用 SQL Query Designer 轻松加入来自可视化表集合的加入查询,然后如果您想了解它是如何工作的,只需调查它,这就是我学习的方式它。 在尝试之前,你不会注意到它有多么迷人。

  • Visual Representation of SQL Joins - 解释SQL JOIN的演练。

  • Complete ref of SQL-Server Join, Inner Join, Left Outer Join, Right Outer Join, Full Outer Join, in SQL-Server 2005(查看下面的快照)。

  • 实体Frameork的ObjectQuery的
  • ToTraceString(你向它添加Include个形状)也是学习它的好方法。

  • SQL-Server Join types (with detailed examples for each join type)
    INNER JOIN - 根据具有匹配数据的一个或多个列,匹配INNER JOIN语句中指定的两个表之间的行。优选地,连接基于参照完整性,强制执行表之间的关系以确保数据完整性 只是为上面的基本定义添加一些注释,通常INNER JOIN选项被认为是应用程序和/或查询中最常见的连接。虽然在某些环境中就是这种情况,但它实际上取决于应用程序所需的数据库设计,参照完整性和数据。因此,请花时间了解所请求的数据,然后选择正确的加入选项 虽然大多数连接逻辑基于指定的两列之间的匹配值,但也可以包括使用大于,小于,不等于等的逻辑。 LEFT OUTER JOIN - 根据join子句中指定的两个表,从左表返回所有数据。在右表中,除了NULL值之外还返回匹配数据,其中左表中存在记录,但右表中不存在记录。
    要记住的另一个问题是LEFTRIGHT OUTER JOIN逻辑彼此相反。因此,您可以更改特定连接语句中表格的顺序,或者从左向右更改JOIN,反之亦然,并获得相同的结果。
    RIGHT OUTER JOIN - 根据join子句中指定的两个表,从右表返回所有数据。在左表中,除了NULL值之外还返回匹配数据,其中记录存在于右表中但不存在于左表中。
    自我加入 - 在这种情况下,同一个表格被指定两次,使用两个不同的别名,以便匹配同一个表格中的数据。
    CROSS JOIN - 根据join子句中指定的两个表,如果WHERE子句对行进行过滤,则会创建一个笛卡尔积。笛卡尔积的大小基于左表中的行数乘以右表中的行数。使用CROSS JOIN时请注意谨慎 FULL JOIN - 根据join子句中指定的两个表,无论匹配数据如何,都会从两个表中返回所有数据。

SQL Query designer sample

答案 1 :(得分:2)

我认为大多数人会接近它:

  • 寻找实质内容,因为它们可以指向潜在的表格
  • 寻找形容词,因为它们可能是字段
  • 实质内容之间的关系给出了JOIN规则

没有比在纸张中绘制这些结构更好的了。

答案 2 :(得分:1)

  1. 编写并调试一个查询,该查询返回具有大多数或最重要数据的表中的字段。添加仅依赖于该表的约束,或者独立于所有表的约束。
  2. 添加与另一个表相关的新where字词。
  3. 重复2直到完成。
  4. 即使在编写SQL查询20多年后,我还没有在查询中使用join运算符。人们几乎总能以“

    ”的形式写出来
     select field, field2, field3, <etc.>
     from table
     where field in (select whatever from table2 where whatever) and
           field2 in (select whatever from table2 where whatever) and ...
    

     select field, field2, field3, <etc.>
     from table1, table2, ...
     where table1.field = table2.somefield and
           table1.field2 = table3.someotherfield and ...
    
    像别人写的那样,只要大胆和练习。这就像骑自行车4或5次后创建这样的查询一样。

答案 3 :(得分:0)

一句话:练习。

打开查询管理器并开始运行查询,直到获得所需内容。查找类似的示例并根据您的情况进行调整。您将始终必须对查询进行一些试验和错误以使其正确。

答案 4 :(得分:0)

SQL与命令式编程非常不同。

1)要设计表格,请考虑实体(关注世界中的真实事物),关系(实体之间)和属性(与实体关联的值)。

2)写一个Select语句考虑塑料挤压机:
 a)您从表中输入原始记录,记录中存在条件  b)您可能必须联系表格才能获得所需的数据  c)您制作挤出喷嘴,使塑料成为您想要的形状。这些是选择列表的各个表达式  d)您可能希望n-ary列表数据按特定顺序出现,您可以应用Order By子句。

3)在发现if(exp,true-exp,false-exp)函数后,制作List表达式是最像命令式编程。

答案 5 :(得分:0)

看看ERD 逻辑或物理版本,它将显示哪些表彼此相关。这样,你可以看到你需要加入哪些表来从点/表a到点/表b,以及什么标准。