oracleskill

Home TUTORIAL Performing Joins Using the SQL/92 Syntax (Part 1/2)

Performing Joins Using the SQL/92 Syntax (Part 1/2)


จาก ตัวอย่างการ JOIN ในเรื่อง Type of Oracle Join เป็น syntax การ join ที่เราคุ้นเคย และ ใช้กันมานาน จนเป็น syntax ที่ classic ซึ่ง SQL JOIN syntax ที่ใช้อยู่ เป็นไปตามมาตรฐาน ANSI SQL/86
    
แต่ เวลาผ่านไป ความต้องการความยืดหยุ่น และ ความง่ายขึ้นในการ query ข้อมูล จึงได้มี SQL syntax ใหม่ๆ ออกมาเป็นมาตรฐาน ANSI SQL/92 ซึ่งทาง Oracle เอง ก็ support มาตรฐานนี้ตั้งแต่ Oracle 9i เป็นต้นมา     

เราจะมาดู syntax การ join กัน เปรียบเทียบระหว่าง ANSI SQL/86 กับ SQL/92
           
Equi- 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 JOIN dept d
USING
(deptno) ;

    
ซึ่งจะได้ผลลัพธ์ออกมาเหมือนกัน แต่การใช้ equi-join แบบ SQL/92 ต้องระวัง 2 เรื่อง
1. Query นั้นต้องเป็น equi-join
2. column ที่ใช้ในการ join นั้น ต้องมีชื่อเหมือนกัน

 


 

Natural Join

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

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


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