Giả sử ta có 2 bảng với dữ liệu như sau
1 2 3 4 5 6 7 8 9 10 |
SQL> select * from emp; EMP DEP JOB FIRST_NAME LAST_NAME SALARY --- --- --- ---------- ---------- ---------- E01 D01 J01 名字1 名前1 100 E02 D01 J01 名前2 名前2 250 E03 D02 J02 名前3 名前3 200 E04 D02 J03 名前4 名前4 200 E05 D02 J03 名前5 名前5 130 E06 D03 J03 名前6 名前6 150 |
1 2 3 4 5 6 7 8 |
SQL> select * from dept; DEP DEPT_NAME --- ---------- D01 総務部 D02 経理部 D04 営業部 D05 管理部 |
Bây giờ ta sẽ lấy dữ liệu của bảng emp left join với bảng dept. Cách viết thông thường như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SQL> select a.emp_id, a.dept_id, b.dept_id, b.dept_name from emp a left outer join dept b on (a.dept_id = b.dept_id ); EMP DEP DEP DEPT_NAME --- --- --- ---------- E01 D01 D01 総務部 E02 D01 D01 総務部 E03 D02 D02 経理部 E04 D02 D02 経理部 E05 D02 D02 経理部 E06 D03 |
Với cách viết sử dụng (+) trong oracle DB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SQL> select a.emp_id, a.dept_id, b.dept_id, b.dept_name from emp a,dept b where a.dept_id = b.dept_id (+); EMP DEP DEP DEPT_NAME --- --- --- ---------- E01 D01 D01 総務部 E02 D01 D01 総務部 E03 D02 D02 経理部 E04 D02 D02 経理部 E05 D02 D02 経理部 E06 D03 |
※ Lợi ích của việc sử dụng (+) khi viết query outer join đó là ko cần quan tâm thứ tự bảng. Ví dụ khi muốn bảng dept left join với emp (tương đương với emp right outer join với dept) thì ta chỉ cần đổi (+) sang vế trái (a.dept_id (+) = b.dept_id).
※Một ưu điểm nữa là khi outer join nhiều bảng với nhau sẽ viết nhanh hơn so với cách viết thông thường.
※Nhược điểm của cách viết này là không tường minh. Khi chưa quen sẽ rất dễ nhầm lẫn giữa left join và right join