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.PrefType
的COUNT(*)
将这些行用于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不一样