2017-07-18 4 views

答えて

0

Equijoinは、値が別のものと等しいかどうかをチェックするジョインです。 内部結合は等価結合であり、 "="記号付きのwhere節を使用する結合は等価結合です。ですから、あなたの質問は:where節またはinner join文を使う方が速いのですか?さて、この質問は、ここで回答されています

Inner join vs Where

台無しに:彼らは何も違いはありませんので、彼らは同じプランを使用しました。 ああ第2の場合には、あなたがこれを行うことができます:

select e.*,d.* 
from emp e 
inner join dept d on e.deptno=d.deptno and d.dname='ACCOUNTING'; 

はそれが

+0

個人的には、フィルタ条件(例:d.dname = 'ACCOUNTING')をJOINセクションに入れるのは悪い方法だと思います。結果に影響を与えないかもしれません(何らかの理由で外部結合に変更した場合など)、フィルタ条件がすべての異なるON句にまたがっているため、さまざまなテーブルにフィルタがあると、特にクエリを読みにくくなります。 – fhossfel

+0

私は同意します、私は、2つのバージョンが実際に同じであることを理解することがより良いと思ったが、私は内側の結合でも文がどこに使用されます。私はon節の後に両方のテーブルを比較する条件だけを入れます。 – WaLinke

+0

ご回答ありがとうございます。 –

0

「エクイ参加」ホープは、それは比較演算子のための平等を使用しています参加しています。一部の用語では、等結合を単なる内部結合(たとえばhttp://www.orafaq.com/wiki/Equi_join)に限定し、他の用語は内部結合と外部結合の両方に用語を使用します(たとえばhttps://stackoverflow.com/a/5471290/121544)。

例のクエリはすべて等結合であり、どちらも内部結合です。異なるのは構文です。最初はSQL-92標準まで使用できません。オプティマイザは、どちらの場合も同じ計画を立てる必要があります。明示的な内部結合は、誤った相互結合を回避するのに役立ちます。

非エクイ内部には参加:

select x 
from X 
inner join Y 
    on Y.BeginDate <= X.SomeDate 
    and X.SomeDate < Y.EndDate 
+1

Equi joinは内部結合のサブセットですか?私は、結合条件が等価(a.id(+)= bなど)である外部結合を考えました。idは、Oracleの構文を使用して)まだ等しく結合されていますか? – mathguy

+0

検索では、等結合は標準化されていません。いくつかは内部結合だけに制限されています。更新されます。 –

+0

あなたの答えは非常にありがたいです –

0

どちらも、あなたの例では、内部結合されています。 「Equi」結合とは、結合条件が結合された表の列の値の等価である結合を意味します(内部の「反対側」は外部ですが、両方の照会は内部結合です。どちらの例も等結合です。

構文 - 最初のものは独自の旧式のOracle構文(推奨されません)を使用し、2番目は標準の現代的なANSI(SQL標準)構文を使用します(推奨)。

また、2つのクエリは同等です。オプティマイザは、それらを同じ実行可能オペレーションに変換するため、パフォーマンスの違いはありません。

+0

こんにちは、近代的なものがお勧めです。古いものを使用する際に問題や欠点はありますか? – pOrinG

+0

お返事ありがとうございます –

関連する問題