การใช้งาน Join ในแต่ละแบบในการ select ข้อมูลมาจาก หลาย Database

SQL Knowledge ทั้ง sql มาตรฐาน หลักการออกแบบฐานข้อมูล ความสัมพันธ์ของ ตาราง Mysql , PGSQL, Oracle, MSSQL

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
ewqolf
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 621
ลงทะเบียนเมื่อ: 14/11/2022 9:26 am

การใช้งาน Join ในแต่ละแบบในการ select ข้อมูลมาจาก หลาย Database

โพสต์ที่ยังไม่ได้อ่าน โดย ewqolf »

การ join นั้นเป็นวิธีการในการ select ข้อมูลหรือการสร้าง view ข้อมูลนั้นบางทีข้อมูลของเรานั้นไม่ได้อยู่แค่ในตารางเดียว ซึ่งโดยส่วนมากเราจะต้องการเอาข้อมูลของฝั่งของ foreign key ที่เราเอามาอ้างอิงนัน้มาแสดงด้วยเช่นโดยปกติเราจะเอาตัวของ user ID มาอ้างอิงแต่บางทีข้อมูลที่เรานั้นต้องการที่จะแสดงนั้นไม่ใช่ user ID เป็น username ที่เราไม่ได้เอามาใช้อ้างอิง เราก็จะใช้งานการ join ต่างๆมาแก้ปัญหาในส่วนนี้ ซึ่งการ Join นั้นมีหลากหลายแบบมาก ไม่ว่าจะเป็นการ inner join outer join left join right join ซึ่งการใช้งานแต่ละแบบนั้นก็ไม่เหมือนกัน แต่โดยรวมแล้วจุดประสงค์ของการ join นั้นเหมือนกัน ซึ่งในกระทู้นี้ผมจะมาอธิบายความแตกต่างและความสำคัญของแต่ละแบบกันครับ

โดยสิ่งแรกเราจะของพูดถึงทำไมเราถึงต้องใช้การ Join
การ join นั้นเป็นเหมือนกันเอาข้อมูลจาก 2 table มารวมกันโดยมีเงื่อนไข รวมกันแบบไหนหรอ ก็คือการรวม คอลั่มกันเช่นถ้าหากเราไม่กำหนดเงื่อนไขในการ join ก็จะเป็นการเอา table ที่ 1 ที่มี 3 คอลั่ม และ table ที่ 2 มีอีก 3 คอลั่ม เมื่อเอามารวมกันเลยก็จะเป็น 6 คอลั่ม ซึ่งคอลั่มนั้นไม่เกี่ยวกับของตัวข้อมูลที่เป็น rows ซึ่งเราจะยังไม่พูดถึง การทำแบบนี้ก็ทำเพื่อให้เราสามารถรวมตารางออกมาเป็นตารางเดียวได้ ในการ select ครั้งเดียวซึ่งการ join นั้นสามารถทำได้หลายแบบดังนี้

ตัวอย่าง database
ตาราง ลูกค้า
มี user ID {1,2,3,4}
มี name {A,B,C,D}
มี lastname {AA,BB,CC,DD} ตามลำดับ
ตาราง ใบสั่งซื้อ
มี order ID {1,2,3}
มี userID {3,2,4} ตามลำดับ

การ inner join
การ Inner join นั้นเป็นเหมือนการเอาข้อมูลที่เฉพาะส่วนที่ ข้อมูลใน rows นั้นตรงกันเช่น เราต้องการให้ join ตารางลูกค้าที่ทำการสั่งซื้อของ
โดยโค้ด sql ที่จะใช้นั้นก็คือ

โค้ด: เลือกทั้งหมด

SELECT order.orderID, user.name FROM user INNER JOIN Order ON order.userID = user.userID;
ซึ่งในโค้ดนี้จะเป็นการ select เอาข้อมูลจาก orderID ในตาราง order และ name จากตาราง user จากนั้นก็จากตาราง user inner join กับ order โดยให้ order.userID คือ user.userID ผลลัพธืก็จะได้เป็น
ผลลัพธ์ inner join
ผลลัพธ์ inner join
ผลลัพธ์ inner join.png (2.6 KiB) Viewed 5874 times
การ left join
การ left join นั้นเป็นการเอาข้อมูลที่อยู่ทางด้านซ้ายเป็นหลักในการแสดงข้อมูลหรือก็คือข้อมูลทุก rows ที่อยู่ใน table ด้าน ซ้ายนั้นจะถูกแสดงทุก rows ถึงแม้ว่ามันจะไม่เหมือนกับด้านขวาก็ตาม เช่น
ผลลัพธ์ left join
ผลลัพธ์ left join
ผลลัพธ์ left join.png (3.17 KiB) Viewed 5874 times

โค้ด: เลือกทั้งหมด

SELECT user.username,ordertable.orderID  FROM user LEFT JOIN ordertable ON ordertable.userID = user.userID;
การ right join
การ right join นั้นก็เหมือนกับตัวของ left join เพียงแต่กลับด้านกันเฉยๆ ข้อมูลใน rows ด้านขวาจะถูกแสดงออกมาทุก rows แม้ว่า ทางซ้ายจะไม่ตรงหรือไม่มีก็ตาม

โค้ด: เลือกทั้งหมด

SELECT ordertable.orderID,user.username FROM user RIGHT JOIN ordertable ON ordertable.userID = user.userID;
ผลลัพธ์ right join
ผลลัพธ์ right join
ผลลัพธ์ right join.png (3.14 KiB) Viewed 5874 times
ซึ่งโดยรวมแล้วการใช้งานการ join นั้นก็เป้นการรวมตารางเพื่อเอาออกมาแสดงเพียงเท่านั้นเองเป็นการ select ข้อมูลมาเพื่อแสดงให้สามารถดูและทำความเข้าใจได้งานเนื่องจากว่าตัว database นั้นการแยกตารางนั้นจะไม่เอาของมูลทุกอย่างไปอยู่ในอีกตารางด้วยจะทำให้เกิดข้อมูลที่ซ้ำซ้อนเกินจำเป็น เพราะงั้นการเอามาใช้นั้นเราก็จะต้องทำการ join นั้นไม่ใช่ว่าจะทำได้แค่ 2 ตาราง ไม่ว่าจะเป็น 3 หรือ 4 ตารางก็ยังทำได้ เราต้องเลือกดูให้เหมาะสมกับ Database ของเราหรือความต้องการข้อมูลนั้นเราควรจะใช้งานการ join แบบไหนดี

อ้างอิง
https://www.w3schools.com/sql/sql_join.asp
https://www.w3schools.com/sql/sql_join_inner.asp
https://www.w3schools.com/sql/sql_join_left.asp
https://www.w3schools.com/sql/sql_join_right.asp
คนจะตายเมื่อถูกฆ่า...ขอบคุณครับ
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 3