2017-05-19 5 views
0

私は常に2つのテーブルから "参照"し、2つのテーブルの例を "結合"します。私は、次のOracle SQL文を参照してください場合には、なぜ、私は奇妙な感じだ:3つのテーブルからの奇妙なOracle SQLがwhere節のjoin 2に残っていますか?

select a.oid, m.acct, p.cdate 
from a, p, m 
where a.oid = p.oid(+) and a.uid = m.uid 
  1. それは実際にDBMSで起こるんか?
  2. 相当するMySQL構文は何ですか?
  3. JOIN where節でいくつかの条件を表現するもう1つの方法はありますか?例: 左a.id = b.idが実際に表現する唯一の別の方法 あるにBを結合a.id = b.id又は 句
  4. にa.idない(Bからb.id選択)であなたは上記の選択と全く同じ古い構文で記述されている投稿もののん

    select a.oid, m.acct, p.cdate 
    from a left outer join p on (a.oid = p.oid) 
    inner join m on (a.uid = m.uid) 
    

    問合せ:

+2

実際には、3つのテーブルすべてに対してJOIN条件があります。第1の条件「a.oid = p.oid(+)」は、* a *と* p *の間のLEFT JOINであり、第2の条件「a.uid = m.uid」は、* a *と* mの間のINNER JOIN * –

+0

3つのテーブル構造と期待される出力をすべて共有できますか? –

答えて

2

これは同等です。簡単な例を有する:両方のクエリがオプティマイザによって同じように処理されるべき

select * from a inner join b on (a.id = b.id); 

select * from a, b where a.id = b.id; 

ことも等価です。また、結合順序はオプティマイザによって決定されます。元のサンプルオプティマイザに戻ると、最初にinner joinを適用してからleft joinまたはそれと反対に適用するかどうかを定義します。

関連する問題