oracleskill

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

Type of Oracle Join (Part 2 of 3)

Natural join

 

Natural Join ก็คือ Equi-Join ที่ไม่ได้ระบุว่าจะเอา column อะไรมาเป็น ตัวเท่ากับ ระหว่างกัน ซึ่ง Oracle จะไปดูว่า column ไหน ที่เป็น column ชื่อเหมือนกัน ของตารางที่จะมา join มันก็จะจับ column นั้นแหละ มาเป็นตัวเท่ากับ ในการ join เช่น

 

SELECT e.ename,d.dname
FROM emp e
NATURAL JOIN dept d

Natural Join result

 จากตัวอย่างข้างบน ผลจะเหมือน equi-join เพราะ Oracle จะจับเอา column ชื่อ deptno ซึ่งมีอยู่ทั้ง 2 ตาราง มา match กัน

 


 

Outer join

 

เป็นการ join ที่ขยายมาจาก inner join โดยจะสามารถ แสดงแถวที่ column ในเงื่อนไขการ join เป็น NULL สามารถแบ่ง outer join ออกเป็นประเภทย่อยๆ ตามการแสดงแถวที่ NULL ได้ คือ  จะแสดงแถวในตารางที่อยู่ทางซ้ายมือ ของเงื่อนไข WHERE ออกมาทั้งหมด แม้ว่าตารางทางขวามือของ WHERE จะไม่ match กับเงื่อนไขก็ตาม ตารางทางขวามือ ก็จะ return ค่าเป็น NULL ออกมาให้

SELECT d.department_id,e.last_name
FROM departments d , employees e
WHERE d.department_id = e.department_id(+)
ORDER by d.department_id ;

Left Outer Join result


 

Right outer join

 

จะแสดงแถวในตาราง ที่อยู่ทางขวามือ ของเงื่อนไข WHERE ออกมาทั้งหมด แม้ว่าตารางทางซ้ายมือของ WHERE จะไม่ match กับเงื่อนไข แต่ตารางทางซ้ายมือก็จะ return ค่าเป็น NULL ออกมาให้    

SELECT d.department_id,e.last_name
FROM departments d , employees e
WHERE d.department_id(+) = e.department_id
ORDER by d.department_id ;

Right Outer Join result


 

Full outer join

 

จะแสดงแถวในตารางที่ อยู่ทั้งทางซ้ายและขวา ของเงื่อนไข WHERE ออกมาทั้งหมด ตารางไหนไม่ match กับเงื่อนไข ก็จะ return ค่าออกมาเป็น NULL

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 ;

หมายเหตุ การใช้เครื่องหมาย (+) ตามหลังตารางทีเป็นฟากส่วนที่หายไปนั้น (ฟากที่ไม่ใช่ outer join )เป็น syntax แบบเก่า คลาสสิค ตามมาตรฐาน SQL ANISI/86 ซึ่งจะยังไม่มี FULL OUTER JOIN แต่ syntax แบบใหม่ตามมาตรฐาน SQL ANSI/92 จะมี FULL OUTER JOIN แล้ว และรูปแบบ syntax จะไม่ใช้ (+) 

Full Outer Join result