2011-03-29 61 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的輸出沒有區別。但是這兩種類型的內部執行可能有所不同。