私はOracle SQLを学んでいますが、今はジョインズの章で悩んでいます。私はなぜ知らないSA_REP 80JoinとNatural Joinの違いは何ですか?
SELECT employee_id, job_id, department_id,
e.last_name, e.hire_date, j.end_date
FROM employees e
NATURAL JOIN job_history j;
176に参加テイラー24/03/2006 31/12/2006
SELECT e.employee_id, e.job_id, e.department_id,
e.last_name, e.hire_date, j.end_date
FROM employees e
JOIN job_history j
ON (e.department_id = j.department_id)
ORDER BY employee_id, last_name;
172 SA_REP 80 Bates 24/03/2007 31/12/2006
173 SA_REP 80 Kumar 21/04/2008 31/12/2007
173 SA_REP 80 Kumar 21/04/2008 31/12/2006
174 SA_REP 80 Abel 11/05/2004 31/12/2007
174 SA_REP 80 Abel 11/05/2004 31/12/2006
175 SA_REP 80 Hutton 19/03/2005 31/12/2007
175 SA_REP 80 Hutton 19/03/2005 31/12/2006
176 SA_REP 80 Taylor 24/03/2006 31/12/2007
176 SA_REP 80 Taylor 24/03/2006 31/12/2006
177 SA_REP 80 Livingston 23/04/2006 31/12/2007
177 SA_REP 80 Livingston 23/04/2006 31/12/2006
に参加し、自然との違いを理解することはできません結合と自然結合の両方に似た機能がある場合、私は異なる結果を受け取ります。
IMO、「Nature Join」は、2つのテーブルの同じ名前を持つすべての列をチェックして結合する**暗黙の**結合列を使用します。 'Join'では、** ON文のjoin列を明示的に宣言する必要があります(同じ名前かもしれないし、おそらく2つのテーブルには同じ10のカラム名がありますが、2つの異なるカラム名を結合するだけです)。 –
自然な結合を決して使用しない理由の良い例です。あなたのケースでは、自然結合はより多くの列を使用して結合し、より制限します。それらの列はどれですか?私はそれが表示されていないとして知らない! –
プレフィックスがそのテーブル名によって単に暗示される短い属性が、他のテーブルを含む関係演算子で使用されるときに問題を引き起こす良い例です。 'employ_end_date'が明白になる' employees'の 'end_date'です。 – onedaywhen