Posted by: piman007 | 26-02-2008

ชนิดการ JOIN ของ Oracle Type of Oracle Join )

การ join เป็นการเรียกดูข้อมูลที่รวมมาจาก ตาราง,วิว, หรือ materialized views ตั้งแต่ 2 ตาราง หรือ มากกว่า Oracle มีประเภทของการ join หลายชนิด ขึ้นอยู่กับรูปแบบที่ผู้ใช้งานจะรวมข้อมูลของ table หรือ view ว่าจะดูยังไง

Equi-Join   
เป็นการ join โดยใช้ เครื่องหมายเท่ากับ (equality operator , “=” ) ในการ join เช่น
  
SELECT e.ename,d.dname
FROM emp e , dept d
WHERE e.deptno = d.deptno ;

 

Non-equi join   
เป็นการใช้ operator อื่นที่ไม่ใช่ equality operator (=) ในการ join เช่น < . >,BETWEEN
  
SELECT e.ename,e.job,e.sal,sg.grade
FROM emp e , salgrade sg
WHERE e.sal BETWEEN sg.losal AND sg.HISAL ;

Inner join หรือ Simple join   
การ join แบบนี้ จะ return แถวออกมา ตามเงื่อนไขใน WHERE และ ถ้า column ในเงื่อนไข แถวไหน มีค่าเป็น NULL ก็จะไม่ return แถวนั้น

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

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

 
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 ;

 
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 ;

 
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 จะไม่ใช้ (+)
 
Self join   
ชื่อก็บอกแล้วว่า Self Join ตรงๆตัว ก็คือการ Join ภายในตารางเดียวกัน เนื่องจากการออกแบบตารางนั้น มี column อย่างน้อย 2 column มีความสัมพันธ์ซึ่งกันและกัน เราสามารถ Join ตัวเองได้โดยการเอาตารางเดียวกันนี้แหละ ทำให้มันดูเป็น 2 ตาราง โดยตั้งชื่อ alias (ชื่อเล่น) มันจึงมองเหมือนเป็นตาราง 2 ตาราง มา join
 
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 ;

คัดลอกจาก http://www.oracleskill.com/type-of-oracle-join-01.html

 


ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

หมวดหมู่

%d bloggers like this: