[SQL] Cross Join, Self Join และ Natural Join บน Microsoft SQL Server

oum_nomercy
Arcadia Software Development
2 min readDec 13, 2018

การ JOIN ใน SQL มีหลากหลายรูปแบบโดยทั่วไปที่เห็นกันบ่อย คือ LEFT JOIN, RIGHT JOIN, OUTTER JOIN และ INNER JOIN แต่ยังมีการ JOIN ในรูปแบบอื่นอยู่อีกที่เราไม่ค่อยจะได้เห็นกันบ่อยนัก แต่เราสามารถนำมาประยุกต์เพื่อให้ได้ข้อมูลที่ต้องการ

Cross Join

Cross join เป็นการรวม row ระหว่าง 2 Tables โดยจะวนจนครบตามจำนวนของข้อมูลแบบ multiple set หรือเรียกว่า Cartesian product โดยจะนำข้อมูลบน Table หลักแต่ละแถวไปรวมกับข้อมูลของ Table รองทั้งหมด โดยไล่ไปจนถึง row สุดท้ายของ Table หลัก

​​SLXLM

ตัวอย่าง Result ของ Cross Join

​​SMXLL

Syntax ของ Cross join สามารถเขียนได้ 2 แบบดังนี้

Select <column list or *>

From Table_A

Cross Join Table_B

หรือ

Select <column list or *>

From Table_A, Table_B

จะเห็นว่าการใช้ Cross join นั้นจะไม่จำเป็นต้องมี Where clause

Self Join

Self join เป็นการ join ภายใน Table เดียวกันการ operate ข้อมูลภายใน Table ตัวเองผ่าน Where Clause โดย Syntax จะเหมือนกับการ join ระหว่าง 2 Table ซึ่งจะอธิบายตามตัวอย่างด้านล่าง

ข้อมูลตัวอย่าง

CUSTOMERS

​​SMXLL

Syntax ของการทำ Self Join

SELECT a.ID, b.NAME, a.SALARY

FROM CUSTOMERS a, CUSTOMERS b

WHERE a.SALARY < b.SALARY

ผลของการทำ Self Join

​​SLXLM

Natural Join

Natural join เป็นการ join ระหว่าง 2 Tables โดยที่แต่ละ Table ต้องมี column ที่เป็น key ที่มี relation กันอยู่หรือเป็นการ share ข้อมูลระหว่าง Table ซึ่งอาจจะเป็น column ที่มีชื่อเหมือนกันก็ได้ โดยการทำ Natural join จะต้องใช้ USING Clause เข้ามาแทนการใช้ Where Clause

​​SLXLM

​​SLXLM

Syntax ของ Natural Join

SELECT b.player, a.coach, a.teamname FROM eteam a

join (select player, teamid ‘id’ from goal b) b using (id)

*กรณีที่ชื่อ column ไม่เหมือนกันสามารถใช้ Aliases ได้

ผลของการทำ Natural Join

​​SMXLL

หมายเหตุ: Syntax ที่อธิบายทั้งหมดนี้ ใช้ใน Microsoft SQL Server เป็นหลักหากเป็น database อื่น สามารถนำไปประยุกต์ใช้งานได้โดยผู้ใช้งานอาจจะต้องศึกษารูปแบบของ database นั้นเพิ่มเติม

--

--