我经常确切地知道我想要什么,并且知道表格是如何相关的才能得到它,但是当谈到连接时,我真的很难将字面语言知识转换为SQL语法。你有什么提示或技巧可以分享过去曾为你效用过吗?
这是一个基本但不好的例子:
“我有类别,它有一对多的产品,有一对多的变体,有一对多的来源。我需要属于XYZ类的所有来源。”
我想要做一些事情,你可以跨越某些语言术语并用SQL语法替换它们。您能否根据类似的概念分享您如何制定查询?谢谢!
答案 0 :(得分:6)
使用 SQL Query Designer 轻松加入来自可视化表集合的加入查询,然后如果您想了解它是如何工作的,只需调查它,这就是我学习的方式它。 在尝试之前,你不会注意到它有多么迷人。
Visual Representation of SQL Joins - 解释SQL JOIN
的演练。
ToTraceString(你向它添加Include
个形状)也是学习它的好方法。
SQL-Server Join types (with detailed examples for each join type):
INNER JOIN - 根据具有匹配数据的一个或多个列,匹配INNER JOIN
语句中指定的两个表之间的行。优选地,连接基于参照完整性,强制执行表之间的关系以确保数据完整性
只是为上面的基本定义添加一些注释,通常INNER JOIN
选项被认为是应用程序和/或查询中最常见的连接。虽然在某些环境中就是这种情况,但它实际上取决于应用程序所需的数据库设计,参照完整性和数据。因此,请花时间了解所请求的数据,然后选择正确的加入选项
虽然大多数连接逻辑基于指定的两列之间的匹配值,但也可以包括使用大于,小于,不等于等的逻辑。
LEFT OUTER JOIN - 根据join子句中指定的两个表,从左表返回所有数据。在右表中,除了NULL
值之外还返回匹配数据,其中左表中存在记录,但右表中不存在记录。
要记住的另一个问题是LEFT
和RIGHT OUTER JOIN
逻辑彼此相反。因此,您可以更改特定连接语句中表格的顺序,或者从左向右更改JOIN
,反之亦然,并获得相同的结果。
RIGHT OUTER JOIN - 根据join子句中指定的两个表,从右表返回所有数据。在左表中,除了NULL
值之外还返回匹配数据,其中记录存在于右表中但不存在于左表中。
自我加入 - 在这种情况下,同一个表格被指定两次,使用两个不同的别名,以便匹配同一个表格中的数据。
CROSS JOIN - 根据join子句中指定的两个表,如果WHERE
子句对行进行过滤,则会创建一个笛卡尔积。笛卡尔积的大小基于左表中的行数乘以右表中的行数。使用CROSS JOIN
时请注意谨慎
FULL JOIN - 根据join子句中指定的两个表,无论匹配数据如何,都会从两个表中返回所有数据。
答案 1 :(得分:2)
我认为大多数人会接近它:
没有比在纸张中绘制这些结构更好的了。
答案 2 :(得分:1)
where
字词。即使在编写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,以及什么标准。