oracleskill

Home TUTORIAL Type of Oracle Join (Part 3 of 3)

Type of Oracle Join (Part 3 of 3)
share

Self join

 

ชื่อก็บอกแล้วว่า Self Join ตรงๆตัว ก็คือการ Join ภายในตารางเดียวกัน เนื่องจากการออกแบบตารางนั้น มี column อย่างน้อย 2 column มีความสัมพันธ์ซึ่งกันและกัน

เราสามารถ Join ตัวเองได้โดยการเอาตารางเดียวกันนี้แหละ ทำให้มันดูเป็น 2 ตาราง โดยตั้งชื่อ alias (ชื่อเล่น) มันจึงมองเหมือนเป็นตาราง 2 ตาราง มา join กัน แบบปกติ

ตัวอย่างเช่น ใน ตาราง emp เราสังเกตเห็นว่า มี column ชื่อ empno กับ mgr อยู่ มีความสัมพันธ์คือ พนักงานคนไหน (empno) มีใครเป็นหัวหน้า (mgr) ซึ่งทั้ง empno กับ mgr มันก็คือ รหัสพนักงาน เหมือนกัน น่ะแหละ ถ้าเราอยากรู้ว่า หัวหน้า ชื่ออะไร เราก็เอา mgr ไปดูว่ามันคือ empno ของ พนักงาน ชื่ออะไร พนักงานคนนั้นแหละ เป็นหัวหน้า ของ พนักงานระดับล่าง

ถ้าดูจากข้อมูล ในตาราง เราจะเห็นว่า ...

พนักงานรหัส 7369 ชื่อ นาย SMITH มีหัวหน้า ที่มีรหัสพนักงาน หมายเลข 7902 ... อยากรู้ชื่อหัวหน้าจัง เรา ก็ต้องวิ่งไปดู รหัสพนักงาน empno หมายเลข 7902

พนักงานรหัส 7902 ก็คือ นาย FORD ซึ่งนายคนนี้ มีหัวหน้าอีกที เ ป็นพนักงานหมายเลข 7566 (ซึ่งหัวหน้าคนนั้น ก็คือนาย JONES)

เราสามารถเขียน SQL ดูว่า พนักงานแต่ละคน มีหัวหน้าชื่ออะไร ได้ดังนี้

SELECT e.empno as "emp_id", e.ename as "worker_name" , 
            e.mgr as "manager_emp_id", m.ename as "manager_name"
FROM emp e , emp m
WHERE e.mgr = m.empno ; 
share