2011-03-29 131 views

回答

34

“内连接”与一般术语中的“等连接”不同。

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

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

+1

那么,非EqJoin是内连接? – UnKnown 2016-01-20 02:05:46

19

我发现这篇文章关于这个,猜测它会回答你的问题。

它们是无关的。

几乎每个加入是等值连接, 因为用于匹配 行的条件是基于两个 值酮从每个 被连接的表的平等。所以这就是 的等值线:ON条件是 等于。这包括内连接 和所有三种类型的外连接。

另一方面,内部连接可以是 ,其基于相等行来匹配行,或者完全基于其他条件来完成 。如果它是 不是等同链接,那么它通常被称为theta连接 ,虽然是精确的 ,但等效连接只是 之一可能的theta连接;其他theta 加入使用少于,少于或等于,等作为比较 运算符。

Read the whole article

7

答案是NO。

的同等联接用来匹配从两个表的两列使用显式操作者=

实施例:

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 

HTH

1

如果有做出来的不同的话,我想在这里它是。我与DB2进行了测试。 在'equi join'中,您必须选择要连接的表的比较列,在内部连接中,您不必强制执行此操作。例如: -

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

这里所得到的行是唯一的两列排

id name 

但我认为相等加入你必须选择其他表的列太

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) 

可能这不是你的问题,但它可能是一个主要的区别。

+0

你的意思是不需要的比较列是什么意思?如果您不会在EqJoin中选择“d.id”,那么它也会起作用。 – UnKnown 2016-01-20 02:19:04

2

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

为了更深入的解释:

的内部联接是联接仅返回行从满足特定条件的连接表中选择。这个条件可能是平等的,这意味着我们将有一个equi-join;如果条件不是平等 - 可能是不平等,大于,小于,等等 - 我们有一个nonequi-join,更准确地说是theta-join。

如果我们不希望一定遇到过这样的情况呢,我们可以有 外连接(所有表中的所有行返回),左连接(所有行 从左表返回,只匹配右表),右加入 (返回右表的所有行,只匹配左表)。

+0

为什么这个答案被低估了? – Eddy 2016-11-14 12:06:51

+0

我不知道...不好的输家?竞争? – Katuiros 2017-04-14 20:40:54

0

答案是否定的,这里是排序和简单的读者。

内部连接可以在连接条件中具有等于(=)和其他运算符(如<,>,<>)。

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

相等加入可以是内连接,左外连接,右外连接

-1

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

考虑三个表:

订单(ord_no,purch_amt,ord_date,CUSTOMER_ID,salesman_id)

客户(CUSTOMER_ID,CUST_NAME,城市品位,salesman_id)

推销员(salesman_id,名称,城市,佣金)

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

找到DETA订单的ils。

使用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; 

使用JOIN EQUI:

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

执行这两个查询。你会得到相同的输出。

回到你的问题Equijoin和inner join的输出没有区别。但是这两种类型的内部执行可能有所不同。