
Last Updated (Sunday, 09 August 2009 20:19) Sunday, 09 August 2009 19:58
Inner-Join
SQL/86
SELECT e.ename,d.dname
FROM emp e , dept d
WHERE e.deptno = d.deptno ;
SQL/92
SELECT e.ename,d.dname
FROM emp e INNER JOIN dept d
ON e.deptno = d.deptno ;
Non-equi join
SQL/86
SELECT e.ename,e.job,e.sal,sg.grade
FROM emp e , salgrade sg
WHERE e.sal BETWEEN sg.losal AND sg.HISAL ;
SQL/92
SELECT e.ename,e.job,e.sal,sg.grade
FROM emp e INNER JOIN salgrade sg
ON e.sal BETWEEN sg.losal AND sg.HISAL ;
Left outer join
SQL/86
SELECT d.department_id,e.last_name
FROM departments d , employees e
WHERE d.department_id= e.department_id(+)
ORDER by d.department_id ;
SQL/92
SELECT d.department_id,e.last_name
FROM departments d LEFT OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER by d.department_id ;
หรือ จะใช้ keyword USING ก็ได้ แต่ให้สังเกตว่า ถ้า column ที่อยู่ภายในวงเล็บ USING(...) ไปปรากฎ อยู่ใน SELECT หรือ ORDER BY จะไม่มีชื่อ alias นำ (d.department_id หรือ e.department_id) ให้ใส่เป็นชื่อ column ไปเลย ตัวอย่างเช่น
SELECT department_id,e.last_name
FROM departments d LEFT OUTER JOIN employees e
USING (department_id)
ORDER by department_id ;
Right outer join
SQL/86
SELECT d.department_id,e.last_name
FROM departments d , employees e
WHERE d.department_id(+) = e.department_id
ORDER by d.department_id ;
SQL/92
SELECT d.department_id,e.last_name
FROM departments d RIGHT OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER by d.department_id ;
หรือจะใช้ keyword USING ก็ได้เช่นกัน
Full outer join
SQL/86
ไม่มี ยังไม่ support full outer join
SQL/92
SELECT d.department_id,e.last_name
FROM departments d FULL OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER by d.department_id ;
หรือจะใช้ keyword USING ก็ได้เช่นกัน
Self Join
SQL/86
SELECT e.ename as "worker_name" , m.ename as "manager_name"
FROM emp e , emp m
WHERE e.mgr = m.empno
SQL/92
SELECT e.ename as "worker_name" , m.ename as "manager_name"
FROM emp e INNER JOIN emp m
ON e.mgr = m.empno ;


