[英]Explain which table to choose “FROM” in a JOIN statement
我是SQL的tables.columns
,如果我使用点符号选择我想要的tables.columns
,我很难理解为什么JOIN
语句中有一个FROM
关键字。 我从两个表中选择哪个表格是否重要? 我在w3schools定义中没有看到任何解释,哪个表是FROM
表。 在下面的示例中,我如何知道为FROM
选择哪个表? 由于我基本上已经选择了哪个table.column
来选择,它可以是吗?
例如:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
INNER JOIN
的顺序无关紧要。
但是,它在LEFT JOIN
和RIGHT JOIN
。 在LEFT JOIN
, FROM
子句中的表是主表; 结果将包含从此表中选择的每一行,而LEFT JOIN
表中指定的行可能会丢失(结果中这些列将为NULL
)。 RIGHT JOIN
类似但反过来:在FROM
中命名的表中可能缺少行。
例如,如果您将查询更改为使用LEFT JOIN
,您将看到没有订单的客户。 但是如果您交换了表的顺序并使用了LEFT JOIN
,那么您将看不到这些客户。 您会看到没有客户的订单(尽管这些行可能不存在)。
from语句引用的是连接而不是表。 表的连接将创建一个集合,您将从中选择列。
对于inner join
, from
子句中的哪个表以及join
子句中的哪个表无关紧要。 对于outer join
它当然很重要,因为允许outer join
的表具有“缺失”记录。
内部连接无关紧要:优化器将确定读取表的正确顺序,无论您选择何种顺序。
对于定向外连接,它确实很重要,因为它们不对称。 您可以选择要在左外连接中保留第一个FROM
表的所有行的表; 对于右外连接,它是另一种方式。
对于完全外部连接,它无关紧要,因为完全外部连接中的表彼此对称使用。
在订购无关紧要的情况下,您选择的顺序对于SQL语句的读者来说是“自然的”,无论这对您的模型意味着什么。 SQL查询很快变得难以阅读,因此对于查询的人类读者来说,正确的表排序非常重要。
在您当前的示例中,from运算符可以应用于两个表。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
- >会像你的代码一样工作
逗号将加入两个表。
从只是意味着您从哪个表中检索数据。
在您的示例中,您使用不同的语法加入了两个表。 它也可能是:
SELECT Customers.CustomerName, Orders.OrderID
FROM Orders
INNER JOIN Customers
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
所有编写的代码都会生成相同的结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.