การใช้ JOIN ใน SQL แบบอ๋องี้นี่เอง

Sakul Montha
3 min readNov 28, 2018

สวัสดีครับผมกิ๊กคนเดิม เพิ่มเติมคือวันนี้จะมาพูดถึง การ JOIN ใน SQL ในลักษณะต่าง ๆ… ก่อนจะเข้าสู่บทความอยากจะขอร้องให้เข้าใจก่อนว่า phpmyadmin ไม่ใช่ ฐานข้อมูล มันเป็นแค่ tools เฉย ๆ แล้วแถมอีกนิด apache กับ appserv ไม่ใช่ PHP นะครับ… ถ้าทุกคนเข้าใจตรงนี้อยู่แล้ว ไปต่อกันเลย ถ้าไม่รู้มาก่อนก็ถือว่ารู้ไว้ใช่ว่านะจ๊ะ

บทความนี้ได้รับแรงบันดาลใจมาจากภาพด้านล่างนี้ครับ คือพอเห็นรูปแล้วรู้สึกถึงพลังบางอย่าง ที่สามารถอธิบายการใช้ JOIN ได้ในภาพเดียว ยิ่งกว่าการพากเพียรเรียนมาในตำราเสียอีก… ถ้าใครยังไม่เข้าใจ อ่านบทความให้จบแล้วเลื่อนกลับมาดูรูปอีกครั้งครับ

https://www.facebook.com/ProgrammersCreateLife/photos/a.241809332534619/1965745276807674/

JOIN IN SQL

การ JOIN table ใน SQL นั้นมันก็คือการที่เราต้องการผลลัพท์ของตารางที่มีการ Query มากกว่า 1 ตารางนั่นเอง ผมจะไม่พูดเยอะนะครับว่ามันคือการทำอะไร เราไปกันต่อเลยดีกว่า

ถ้าเราจะแบ่งประเภทของการ JOIN ใน SQL นั้นตอนที่ผม Research ก็มีมาเจออันที่ไม่เคยใช้เยอะเหมือนกัน ปัจจุบันการ JOIN มีอยู่ด้วยกัน 11 ประเภท

  1. EQUI JOIN
  2. NON EQUI JOIN
  3. INNER JOIN
  4. NATURAL JOIN
  5. CROSS JOIN
  6. OUTER JOIN
  7. LEFT JOIN
  8. RIGHT JOIN
  9. FULL OUTER JOIN
  10. JOIN A TABLE TO INSELF
  11. SELF JOIN

ในบทความนี้ผมจะยกตัวอย่างการ JOIN มาแค่ 4 อย่างตามที่เราเห็นจากภาพแห่งแรงบันดาลใจของผม
อ้อออออออ อีกนิด SQL ไม่ใช่ MySQL หรือ MSSQL หรือ OracleSQL นะครับ

LEFT JOIN

LEFT JOIN เป็นการ JOIN TABLE แบบ เอา TABLE ซ้าย หรือ TABLE แรก เป็นหลัก ถ้าซ้ายมี เอาซ้ายออกมาให้หมด
ถ้าขวามี และซ้ายก็มีด้วย ก็จะเอาออกมา
ถ้าขวาดันไม่มี แต่ซ้ายมี พวกฟิลด์ต่าง ๆ ที่อยู่ใน TABLE ขวาจะ NULL

LEFT JOIN
SELECT tbl1.col1, tbl2.col2...
FROM tbl1
LEFT JOIN tbl2
ON tbl1.field_name = tbl2.field_name;

การจำที่ง่ายที่สุดของ LEFT JOIN คือ เอาซ้ายเป็นหลัก

RIGHT JOIN

RIGHT JOIN เป็นการ JOIN TABLE เหมือน LEFT JOIN ทุกประการแต่… แทนที่จะเอาข้อมูลด้านซ้าย ให้มาเอาด้านขวาแทน…
ถ้าขวามี เอาขวาออกมาให้หมด
ถ้าขวามี และซ้ายก็มีด้วย ก็จะเอาออกมา
ถ้าซ้ายดันไม่มี แต่ขวามี พวกฟิลด์ต่าง ๆ ที่อยู่ใน TABLE ซ้ายจะ NULL

RIGHT JOIN
SELECT tbl1.col1, tbl2.col2...
FROM tbl1
RIGHT JOIN tbl2
ON tbl1.field_name = tbl2.field_name;

การจำที่ง่ายที่สุดของ RIGHT JOIN คือ เอาขวาเป็นหลัก

INNER JOIN

INNER JOIN ให้จำว่า Inner ล้วน ๆ อ่าวไม่ใช่… การทำ Inner join นั้นเป็นการเอาข้อมูลของทั้งสองตารางมา join กัน แต่ว่า จะเอาเฉพาะที่เงือนไขของทั้งสองตารางมีเหมือนกันเท่านั้น

INNER JOIN
SELECT tbl1.col1, tbl2.col2...
FROM tbl1
INNER JOIN tbl2
ON tbl1.field_name = tbl2.field_name;

การจำที่ง่ายที่สุดของ INNER JOIN คือ เอาที่มีทั้งคู่เท่านั้นมาแสดง

FULL OUTER JOIN

FULL OUTER JOIN เป็นการ JOIN แบบไม่สนใจโลก ไม่สนใจว่าจะ ตารางซ้าย ตารางขวาคือเอาหมด ขอแค่มันตรงเงื่อนไขที่ระบุไว้ก็พอ
ซ้ายมีก็แสดง
ขวามีก็แสดง
ซ้ายมีขวาไม่มีก็แสดง ส่วนด้านขวาที่ไม่มีจะออกเป็น null
ขวามีซ้ายไม่มีก็แสดง ส่วนด้านซ้ายที่ไม่มีจะออกเป็น null

FULL OUTER JOIN
SELECT *
FROM tbl1
FULL OUTER JOIN tbl2
ON tbl1.field_name = tbl2.field_name;

ใน MySQL ไม่มี FULL OUTER JOIN นะครับ ถ้าจะใช้แนะนำให้ไปหาอ่าน “UNION”
การจำที่ง่ายที่สุดของ FULL OUTER JOIN คือ เอาหมดทั้งซ้ายทั้งขวา

Conclusion

การทำ JOIN TABLE ในบทความนี้จะเห็นว่า ไม่มีการพูดถึง Performance ด้วย เนื่องจากต้องการอธิบายเทคนิคการ JOIN ที่ใช้บ่อยในชีวิตประจำวันสำหรับ Beginner มากกว่า ซึ่งการ JOIN นั้นจะมีผลอย่างมาก ในกรณีที่ Data ที่เราต้องการ Query มีปริมาณมาก อย่างใน MySQL เค้าก็จะมีคำสั่ง EXPLAIN เพื่อเอามาดูว่า Query นี้ทำงานอย่างไร ซึ่งเราก็ควรศึกษา และใช้ให้ถูก ให้ควรด้วย ไม่อย่างนั้นตัว Query นี่แหละที่จะเป็นอีกตัวหนึ่งที่ทำให้ระบบ บึ้มมมมมม

ถ้าเราลองสังเกตุดี ๆ ระลึกชาติกันนิดหน่อย จะเห็นว่าพวกข้อมูลต่าง ๆ ที่เรากำลัง JOIN กันอยู่เนี่ย มันเป็นพื้นฐานมาจากวิชาคณิตศาสตร์ในเรื่องของ set ด้วย เห็นมั้ย เรียนไปได้ใช้…

จบกันไปแล้วนะครับสำหรับ Technic การจำการใช้ JOIN ใน SQL ซึ่งสามารถนำไปประยุกต์ใช้กับ MSSql, MySQL, OracleSQL หรือ Database เจ้าอื่น ๆ กันได้

ก่อนจากกันไป ทวนอีกรอบ
การจำที่ง่ายที่สุดของ LEFT JOIN คือ เอาซ้ายเป็นหลัก
การจำที่ง่ายที่สุดของ RIGHT JOIN คือ เอาขวาเป็นหลัก
การจำที่ง่ายที่สุดของ INNER JOIN คือ เอาที่มีทั้งคู่เท่านั้นมาแสดง
การจำที่ง่ายที่สุดของ FULL OUTER JOIN คือ เอาหมดทั้งซ้ายทั้งขวา

ก่อนจะจากไปสุดท้าย เลื่อนขึ้นไปดูรูปอีกทีครับ รูปเดียว Get ทุกอย่างเลย 555

--

--

Sakul Montha

Chief Product Officer, a man who’s falling in love with the galaxy.