質問: 外部結合について 以下のsqlの2つの結果は同じでしょうか? left outherは、on句の中の左の表を全て取得するというものでしょうか? select ename, dname, jname from emp e left outher join dept d on (e.deptno=d.deptno) left outher join job j on (e.jobid=j.deptno); select ename, dname, jname from emp e right outher join dept d on (d.deptno=e.deptno) right outher join job j on (j.jobid=e.deptno); よろしくお願いします。
回答: どこで躓いているのかわかりませんが。。 ・deptもjobsもempに対してそれぞれ結合されていることをまず理解しましょう。 結合キーを見ての通り、jobsはdeptに対して結合しているわけではありません。 select ename,dname from emp e left outer join dept d on d.deptno=e.deptno select ename,jname from emp e left outer join jobs j on j.jobid=e.jobid ・right outer joinはleft outer joinと逆です。 emp表がすべて表示されます select ename,dname from emp e left outer join dept d on d.deptno=e.deptno dept表がすべて表示されます select ename,dname from emp e right outer join dept d on d.deptno=e.deptno ・この問題をright outer joinで回答するとしたら、 select ename,dname,jname from dept d right outer join emp e on d.deptno=e.deptno left outer join jobs j on j.jobid=e.jobid 書けなくはありませんが、非常にわかりにくい文になります。 どちらが主になるテーブルかが分かりにくくなるので、一般的にはright outer joinは使わないようします。 (right outer joinはすべてleft outer joinを使った文に書き換えることが可能です) ※outherではなく、outerです。