私は、ANSI-92 SQL標準を学ぶためにしようとしているが、私はそれを完全に理解していないようだ(私は一般的にだけでなく、ANSI-89標準にし、データベースに新たなんです)。結合を誤解していますか?
私の例では、私は3つのテーブルkingdom - <ファミリー - <種(生物学分類)を持っています。
- 種や家系のない王国があるかもしれません。
- 種もkindgomsのない家族があるかもしれません。
- 王国や家族のない種があるかもしれません。
なぜこれが起こるかもしれませんか?
はここなど、生物学者は、新しい種を見つけたが、彼は王国や家族にこれを分類していない、何の種を持っていないし、それが属している必要があり何王国わからない新しいファミリを作成
を言いますhttp://sqlfiddle.com/#!4/015d1/3
私はすべての王国、すべての種が私を検索するクエリを作成しますが、種を持たない家族は検索しませんので、私はこれを行います。私はこれはと思う何
select *
from reino r
left join (
familia f
right join especie e
on f.fnombre = e.efamilia
and f.freino = e.ereino
) on r.rnombre = f.freino
and r.rnombre = e.ereino;
は次のとおりです。
が参加する権利として、家族や種に参加し、それはすべての種をもたらしますが、そうではない何の種を持っていないものを家族。したがって、ある種が家族に分類されていない場合、それは家族にはnullで表示されます。
その後、左が参加するように、結果に王国に参加するので、それは何の家族やその王国に分類された種が存在しない場合でも、すべての王国をもたらします。
私は間違っていますか?分類されていない種を私に見せてはいけませんか?内側のクエリを実行すると、必要なものが表示されます。私は物事をグループ化している問題がありますか?
これは、Oracleが行うクエリの最適化を台無しに?私のクエリでは、括弧は不要ですしていますか?私は同じ結果を得ますか?オラクルの指示は何ですか? – Roger
@outis私は結合構文が入れ子になっていないと敬意を表する必要があります。 [この記事ではこのトピックについて論じていると思います](http://tonyhasler.wordpress.com/2009/02/22/parentheses-in-ansi-join-syntax/)、括弧を使って複数の表を結合するときの操作 –
@MichaelFredrickson:私は正しかった。そこにはSQL/Foundation§7.6があります。 – outis