[英]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.