有人可以向我解释一下加入吗?
内连接根据 where 条件选择公共数据。
左外连接从左侧选择所有数据,而不考虑公共数据,但从右表中获取公共数据,反之亦然。
我知道基础知识,但在加入超过 5、8、10 个表时问题仍然存在。
假设我有 10 个表要加入。如果我与前 5 个表有内连接,现在尝试对第 6 个表应用左连接,那么查询将如何工作?
我的意思是说现在前5个表的结果集将被视为左表,第6个将被视为右表?或者只有第五张桌子会被认为是左边,第六张是右边?请帮助我解决这个问题。
有人可以向我解释一下加入吗?
内连接根据 where 条件选择公共数据。
左外连接从左侧选择所有数据,而不考虑公共数据,但从右表中获取公共数据,反之亦然。
我知道基础知识,但在加入超过 5、8、10 个表时问题仍然存在。
假设我有 10 个表要加入。如果我与前 5 个表有内连接,现在尝试对第 6 个表应用左连接,那么查询将如何工作?
我的意思是说现在前5个表的结果集将被视为左表,第6个将被视为右表?或者只有第五张桌子会被认为是左边,第六张是右边?请帮助我解决这个问题。
当连接多个表时,每个连接的输出逻辑上形成一个进入下一个连接的虚拟表。
因此,在您的问题示例中,连接前 5 个表的复合结果将被视为左侧表。
有关这方面的更多信息,请参阅Itzik Ben-Gan 的逻辑查询处理海报。
连接中涉及的虚拟表可以通过定位ON
子句来控制。例如
SELECT *
FROM T1
INNER JOIN T2
ON T2.C = T1.C
INNER JOIN T3
LEFT JOIN T4
ON T4.C = T3.C
ON T3.C = T2.C
相当于(T1 Inner Join T2) Inner Join (T3 Left Join T4)
JOIN
按顺序考虑 ' 是有帮助的,所以前者是正确的。
SELECT *
FROM a
INNER JOIN b ON b.a = a.id
INNER JOIN c ON c.b = b.id
LEFT JOIN d ON d.c = c.id
LEFT JOIN e ON e.d = d.id
将是来自a
和所有条件匹配的所有字段,加上其条件匹配的值加上b
其所有条件匹配的所有内容。c
ON
d
e
我知道这RIGHT JOIN
是完全可以接受的,但根据我的经验,我发现这是不必要的——我几乎总是从左到右加入。
> 简单的 INNER JOIN VIEW 代码...
CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
刚刚从 W3School 中给出的示例数据库中尝试了以下内容。对我来说工作得很好。
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate, Products.ProductName, Products.ProductID
FROM Orders
INNER JOIN Products
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
你可以像这样申请加入..
select a.*,b.*,c.*,d.*,e.*
from [DatabaseName].[Table_a] a
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5 and
b.con=6
在这里,在 a.* 的位置和 where 条件下,您可以显示您喜欢的列(已归档)以及在 where 条件下的条件。您可以根据自己的选择插入更多表和数据库。但请注意,如果您在不同的数据库中工作,则需要提及数据库名称和别名。