内连接和等连接一样吗?

Posted

技术标签:

【中文标题】内连接和等连接一样吗?【英文标题】:Is inner join the same as equi-join? 【发布时间】:2011-07-25 04:07:09 【问题描述】:

你能告诉我内连接和等连接是否相同吗?

【问题讨论】:

【参考方案1】:

答案是否定的。

等值连接用于使用显式运算符 = 匹配两个表中的两列:

例子:

select *
  from table T1, table2 T2
  where T1.column_name1 = T2.column_name2

内连接用于获取两个表之间的叉积,合并两个表中的所有记录。要获得正确的结果,您可以使用等连接或自然连接(表之间的列名必须相同)

使用等值连接(显式和隐式)

select *
  from table T1 INNER JOIN table2 T2
  on T1.column_name = T2.column_name

select *
  from table T1, table2 T2
  where T1.column_name = T2.column_name

或者使用自然连接

select *
  from table T1 NATURAL JOIN table2 T2

【讨论】:

两个表的行数不同,自然连接有影响吗? @Ahmn21与其他任何连接类型的方式相同【参考方案2】:

答案是否定的,这里是为读者简明扼要的。

内连接可以在连接条件中包含等号 (=) 和其他运算符(如 、)。

等值连接在连接条件中只有等号(=)运算符。

Equi join可以是Inner join、Left Outer join、Right Outer join

【讨论】:

equi join 怎么能是左外连接还是右外连接?【参考方案3】:

答案是肯定的,但作为结果集。所以这里是一个例子。

考虑三个表:

订单(ord_no、purch_amt、ord_date、customer_id、salesman_id)

customer(customer_id,cust_name, city,grade, salesman_id)

salesman(salesman_id, name, city, Commission)

现在,如果我有这样的查询:

查找订单详情。

使用 INNER JOIN:

SELECT * FROM orders a INNER JOIN customer b ON a.customer_id=b.customer_id 
INNER JOIN salesman c ON a.salesman_id=c.salesman_id;

使用 EQUI JOIN:

SELECT * FROM orders a, customer b,salesman c where 
a.customer_id=b.customer_id and a.salesman_id=c.salesman_id;

执行这两个查询。您将获得相同的输出。

回答你的问题等值连接和内连接的输出没有区别。但是这两种类型的内部执行可能存在差异。

【讨论】:

这是不正确的。一种使用 ANSI 92 JOIN 语法 (FROM a JOIN b ON a.x = b.y)。另一个使用非 ANSI 语法 (FROM a, b WHERE a.x = b.y)。但两者都加入a.x = b.y,这使它们成为等值连接因为它们使用等号。非等值连接使用等号以外的运算符。这就是它的全部含义。非等值连接示例:FROM a JOIN B ON a.x <> b.y(不等式连接)、FROM a JOIN b ON a.x BETWEEN b.y AND b.z(范围连接)。【参考方案4】:

简单地说:等值连接是一种可能的内连接类型

更深入的解释:

内连接是只返回满足特定条件的连接表中的行的连接。这个条件可能是相等的,这意味着我们会有一个equi-join;如果条件不是相等——可能是不相等、大于、小于、介于等——我们有一个nonequi-join,更准确地说是theta-join。

如果我们不希望这些条件必须满足,我们可以有 外连接(返回所有表的所有行),左连接(所有行 从左表返回,只匹配右表),右连接 (返回右表的所有行,只匹配左表)。

【讨论】:

【参考方案5】:

一般来说,“内连接”与“等连接”不同。

'equi-join' 表示使用相等运算符或等效运算符连接表。如果外连接只使用相等,我仍然会称它为“等连接”(其他人可能不同意)。

'inner join' 与'outer join' 相对,确定没有匹配值时如何连接两个集合。

【讨论】:

那么,非 EqJoin 是内连接吗? 这是一个很好的解释。是否有正式定义 equi-join 概念的文档或书籍?【参考方案6】:

如果必须做出改变,我想就在这里。我用 DB2 对其进行了测试。 在“等连接”中,您必须选择要连接的表的比较列,在内连接中,您不必这样做。示例:-

Select k.id,k.name FROM customer k
inner join  dealer on(
k.id =dealer.id
)

这里结果行只有两列行

id    name

但我认为在 equi join 中你也必须选择其他表的列

Select k.id,k.name,d.id FROM customer k,dealer d
where
k.id =d.id

这将导致三列的行,你不可能在这里没有不需要的经销商比较列(即使你不想要它),行看起来像

 id(from customer) name(from Customer) id(from dealer)

您的问题可能不是这样。但这可能是主要区别之一。

【讨论】:

不需要的比较列是什么意思?如果你不会在 EqJoin 中选择d.id,那么它也可以工作。

以上是关于内连接和等连接一样吗?的主要内容,如果未能解决你的问题,请参考以下文章

sql左连接 右连接 内连接 外连接都是啥

内连接,外连接,交叉连接

IT运维公司内网服务器可以远程桌面连接吗?怎么连接?

内连接,左连接,右连接

HQL中左连接,右连接内连接

内连接、自然连接和等值连接