Thursday, October 4, 2012

SQL Server : คำสั่ง Select หลาย Table

เมื่อก่อนหลายคนอาจเคยใช้แบบโบราณแบบนี้ซึ่งไม่ถูกต้องตามมาตรฐาน ANSI SQL เช่น
SELECT *
    FROM TableOne t1, TableTwo t2
    WHERE t1.SomeKey = t2.Id
        AND t1.SomeValue = 'search'

แล้วเขียนอย่างไรจึงจะถูกต้องตามมาตฐานหละ ก็เขียน
ประมาณนี้นะ

select t1.col1, t2.col1, t3.col1, t4.col1 ... etc
from table1 t1
inner join table2 t2
on t1.col2 = t2.col2
inner join table3 t3
on t1.col3 = t3.col3
inner join table4 t4
on t1.col4 = t4.col4
where ...
etc.

หรือ
SELECT *
    FROM TableOne t1
    INNER JOIN TableTwo t2
        ON t1.SomeKey = t2.Id
    WHERE t1.SomeValue = 'search'

ลองมาดูตัวอย่าง Inner และ Outer Joins กัน

1.Inner Join

select * from dbo.Students S 

INNER JOIN dbo.Advisors A 

ON S.Advisor_ID=A.Advisor_ID

ผลลัพท์




2.Left Outer Join

select * from dbo.Students S 
   LEFT OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID




3.Right Outer Join

select * from dbo.Students S 
   RIGHT OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID

ผลลัพท์ที่ได้ก็ลองคิดดูนะ


4.Full Outer Join

select * from dbo.Students S 
   FULL OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID






 5.เลือก Row ที่ไม่ Join

select * from dbo.Students S 
   FULL OUTER JOIN dbo.Advisors A 
   ON S.Advisor_ID=A.Advisor_ID
   where A.Advisor_ID is null or S.Student_ID is null



No comments:

Post a Comment