Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中连接多个表_Sql_Sql Server_Join - Fatal编程技术网

在SQL中连接多个表

在SQL中连接多个表,sql,sql-server,join,Sql,Sql Server,Join,sombody能给我解释一下连接吗 内部联接根据where条件选择公共数据 左外联接从左选择所有数据,而不考虑公共数据,但从右表获取公共数据,反之亦然 我知道基本知识,但当涉及到5、8、10个以上的表时,问题仍然存在 假设我有10个表要连接。如果我对前5个表进行了内部联接,现在尝试对第6个表应用左联接,那么现在查询将如何工作 我的意思是说,前5个表的结果集将被视为左表,第6个表将被视为右表?或者只有第五张桌子被视为左边,第六张桌子被视为右边?请帮助我解决这个问题。当连接多个表时,每个连接的输出逻

sombody能给我解释一下连接吗

内部联接根据where条件选择公共数据

左外联接从左选择所有数据,而不考虑公共数据,但从右表获取公共数据,反之亦然

我知道基本知识,但当涉及到5、8、10个以上的表时,问题仍然存在

假设我有10个表要连接。如果我对前5个表进行了内部联接,现在尝试对第6个表应用左联接,那么现在查询将如何工作


我的意思是说,前5个表的结果集将被视为左表,第6个表将被视为右表?或者只有第五张桌子被视为左边,第六张桌子被视为右边?请帮助我解决这个问题。

当连接多个表时,每个连接的输出逻辑上形成一个虚拟表,进入下一个连接

因此,在您问题的示例中,连接前5个表的合成结果将被视为左手表

请参阅以了解有关此的更多信息

联接中涉及的虚拟表可以通过定位
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内部联接T2)内部联接(T3左侧联接T4)

按顺序考虑
联接是有帮助的,因此前者是正确的

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
中的所有字段,其中所有
上的
标准匹配,加上其标准匹配的
d
中的值加上其所有标准匹配的
e
中的所有内容


我知道,
右连接
是完全可以接受的,但根据我的经验,这是不必要的——我几乎总是从左到右连接东西

>简单内部联接视图代码…

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;

你可以这样申请加入

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

在这里,在*的位置和where条件中,您可以显示您喜欢的列(字段),并根据where条件中的条件。您可以根据自己的选择插入更多的表和数据库。但请注意,如果您在不同的数据库中工作,则需要提及数据库名称和别名

刚刚从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;

@JohnWoo这篇文章在评论中受到作者的好评。维恩图没有说明一般联接如何与其输入相关。re“虚拟表……可以通过定位ON子句“Cool!所有常见的SQL方言都观察到了吗?@PieterGeerkens-是的,这是ANSI SQL。e、 g.和。尽管MySQL需要括号。