SQLServer中 join 跟inner join的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer中 join 跟inner join的区别是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

一、指代不同

1、join:left join简写形式,关键字会从左表 (table_name1) 那里返回所有的行。即使在右表 (table_name2) 中没有匹配的行。

2、inner join:组合两个表中的记录,只要在公共字段之中有相符的值。

二、调用方式不同

1、join:在 FROM 子句中使用INNER JOIN运算。只返回左表存在的值。

2、inner join:在 FROM 子句中使用INNER JOIN运算。这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。


三、作用不同

1、join:类标识符是已被联接的字段,但是并不包含在查询输出中,因并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中。

2、inner join:可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。

参考资料来源:百度百科-INNER JOIN    

参考资料来源:百度百科-SQL LEFT JOIN

如何在 SQL Server 2014 中使用多个表和 INNER JOIN 更新 RowCount

【中文标题】如何在 SQL Server 2014 中使用多个表和 INNER JOIN 更新 RowCount【英文标题】:How to UPDATE a RowCount using multiple tables and INNER JOIN in SQL Server 2014 【发布时间】:2022-01-17 10:30:01 【问题描述】:

我不知道这是否可以做到是一个单一的声明,但我想我会问。

一个 SQL Server 2014 存储过程涉及 3 个表:

CREATE TABLE #TempTable 
(
    EntityID int,
    PrefType smallint,
    Col1 int,
    Col2 int
)

Table1
(
    EntityID int,
    PrefType smallint
)

Table2
(
    EntityID int,
    MyRowCount int
)

#TempTable 用于处理其他内容,现在只包含几行。我想使用来自Table1 WHERE #TempTable.EntityID = Table1.EntityID AND #TempTable.PrefType = Table1.PrefTypeCOUNT(*) 将这些行用于UPDATE Table2.MyRowCount 对应的EntityID

我试过了:

UPDATE Table2 T2 
INNER JOIN (SELECT T1.EntityID,
                   COUNT(*) T1RowCount
            FROM Table1 T1, #TempTable2 TT 
            WHERE T1.EntityID = TT.EntityID 
              AND T1.PrefType = TT.PrefType
            GROUP BY T1.EntityID) AS T1Temp ON T1Temp.EntityID = T2.EntityID 
SET T2.MyRowCount = T1Temp.T1RowCount

但我收到一个语法错误(上面“UPDATE Table2 T2”中 T2 下的波浪线)告诉我:

“T2”附近的语法不正确。期待 SET。

INNER 和 AS 下的另一条波浪线也带有“不正确的语法”。

这可能是使用旧版本 SQL Server (2014) 的问题吗?还是我的 SQL 错误/不可能?

感谢您的帮助。

【问题讨论】:

如果您检查documentation,您会看到join(在更新中)您需要from,而set 位于from 之前。 (几乎就像错误告诉你的那样)。 【参考方案1】:

正如@DaleK 已经评论的那样 - 如有疑问,请查看official documentation!这应该是您的第一站 - 永远如此。

阅读文档,你会发现你必须使用这个 SQL 语句:

-- UPDATE, then SET
UPDATE Table2
SET MyRowCount = T1Temp.T1RowCount
-- only then FROM and INNER JOIN
FROM Table2 T2
INNER JOIN (SELECT T1.EntityID,
                   COUNT(*) T1RowCount
            FROM Table1 T1, #TempTable2 TT 
            WHERE T1.EntityID = TT.EntityID 
              AND T1.PrefType = TT.PrefType
            GROUP BY T1.EntityID) AS T1Temp ON T1Temp.EntityID = T2.EntityID 

【讨论】:

感谢 @DaleK 和 marc_s 的解决方案。实际上,我查看了几个示例(包括dba.stackexchange.com/questions/56323/…)并将其用作指南,这显然是我没有直接阅读文档的错误。我更像是一个前端人员,但必须做一些后端工作,因此非常感谢您的帮助。干杯... :)

以上是关于SQLServer中 join 跟inner join的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

sqlServer 2005 中内连接(inner join)与左连接(left join)的区别?最好附加个实例?

SQL数据库语言基础之SqlServer多表连接查询与INNER JOIN内连接查询

什么时候应该使用 INNER -LOOP- JOIN 而不是 INNER JOIN

如何在 SQL Server 中使用 INNER JOIN 从多个表中删除

update inner join set 和 update set from ,如何使用一个表中的字段更新另一个表中字段,MySQL和SqlServer不一样

SQL中inner joinouter join和cross join的区别