当你有两张像这样的表时
SELECT Customers.CustomerName,
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
两个表都必须共享一个列名,就像在这个例子中他们共享CustomerID列一样吗?
答案 0 :(得分:0)
表不必具有为连接命名相同的任何列,ON x = y告诉SQL哪些列对于连接是关键的。但是,如果任何两列具有相同的名称,则在引用它们时必须指定它们来自的表,否则SQL将引发错误。
答案 1 :(得分:0)
首先,这不是UNION
,而是JOIN
。在SQL中有一个UNION
操作,但它意味着不同的东西。
如果您的问题是“我JOIN
我的数据必须具有相同名称的列”答案是否定的。你可以写:
SELECT Customers.CustomerName,
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.PurchasedByID
ORDER BY Customers.CustomerName;
如果这些是你的两个表中的名字。
另一方面,如果你问的是“当我执行JOIN
时,我是否需要将两个表连同一个表中的列与另一个表中的列中的值相匹配?”然后答案也是否定的。但是,没有链接列的JOIN
可能不会给出预期的结果 - 结果集中的记录数将等于第一个表中的记录数乘以第二个表中的记录数。这被称为两个表的笛卡尔积。
答案 2 :(得分:0)
列名无关紧要 - 您可以加入任何现有列。也就是说,明智地建立合理的连接是一种很好的做法 - 您不希望在一个名为" CustomerDataNumbers"它连接到另一个名为" CustomerID"的表中的列,因为只调用两个列" CustomerID"会更有意义。 (或类似的东西)。连接非常强大......只要语法正确,几乎任何东西都可以工作。
您应该注意,联接与联盟不同。给定一组管理连接的规则,连接将合并来自两组数据的列 - 一个联合将合并每个数据集中的行。