Mysql where in ม ข อ เส ย อย างไร

RDBMS มีให้เลือกใช้งานมากมาย ทั้งแบบ ฟรี (free) , มีค่า (license fee) Oracle ,MSSQL ,PostgreSQL ,MySQL จึงไม่ใช่เรื่องง่ายเลย ที่จะเลือกมาศึกษาสำหรับผู้เริ่มต้น

RDBMS มาพร้อมกับความสามารถการทำ Stored Procedure และ Function มันก็คือการเพิ่มความสามารถของงาน SELECT ,INSERT ,UPDATE ,DELETE ให้อยู่ในรูปแบบการเขียนโปรแกรม ซึ่งในแต่ละ Database Business เองก็มีการเขียนที่แจกต่างกัน แต่โดยรวมมี concept การทำงานที่ไม่ต่างกันเลย เมื่อเรียนรู้ Oracle Database จนเชียวชาญ ก็จะไปเรียนรู้ MySQL Stored Procedure ,Function ได้ไม่ยากเลย

อยากจะเขียนโปรแกรมกับ RDBMS ละ ทำไง

มีบางสถานะการอยากที่จะ reuse (column/field) ที่ผ่านการใส่ condition แล้ว กับ sql statement อื่น ๆ เหมือนการที่เราเขียน method (JAVA) หรือ function (Javascript) มีการส่ง parameter (IN parameter) เหล่านี้ จะมาหาคำตอบและทำความรู้จัก Stored Procedure & Function กัน

มีผลเสียแน่นอนครับ เพราะ query optimizer ของ MySQL ไม่ฉลาดพอที่จะตัดสินใจได้อย่างแม่นยำว่าใช้ index แล้วจะทำให้เร็วขึ้นหรือเปล่า สำหรับข้อมูลที่มีความหลายหลายต่ำ การค้นหาใน index แล้วนำไปเทียบกับตารางจริงอาจจะช้ากว่าก็เป็นได้ครับ

สวัสดีครับผมกิ๊กคนเดิม เพิ่มเติมคือวันนี้จะมาพูดถึง การ 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 เจ้าอื่น ๆ กันได้