อย่างที่เราทราบดีว่า MySQL SELECT สามารถใช้เพื่อดึงข้อมูลจากตารางเดียวในแต่ละครั้ง แต่คำถามทั้งหมดไม่สามารถตอบได้โดยใช้เพียงตารางเดียว ดังนั้นสำหรับวัตถุประสงค์ดังกล่าวข้างต้น เช่น การดึงข้อมูลที่จัดเก็บไว้ในตารางหลายๆ ตาราง เราสามารถใช้การดำเนินการ Join ได้
โดยทั่วไป การเข้าร่วม MySQL เป็นวิธีการเชื่อมโยงข้อมูลจากตารางตั้งแต่สองตารางขึ้นไปโดยพิจารณาจากค่าของคอลัมน์ทั่วไประหว่างกัน โดยผลลัพธ์จะเป็นตารางชั่วคราวใหม่ กล่าวอีกนัยหนึ่ง เราสามารถพูดได้ว่าการรวม MySQL ช่วยให้เราสามารถดึงระเบียนจากตารางที่เกี่ยวข้องกันสองตารางขึ้นไปในตารางชั่วคราวใหม่ ตารางชั่วคราวใหม่ถูกสร้างขึ้นตามคอลัมน์ที่ทั้งสองตารางใช้ร่วมกัน ซึ่งแสดงถึงคอลัมน์ที่มีความหมายของการเปรียบเทียบ
ค่าทั่วไปมักจะเป็นชื่อคอลัมน์และประเภทข้อมูลเดียวกันซึ่งปรากฏในทั้งตารางที่เข้าร่วมที่เข้าร่วม คอลัมน์เหล่านี้เรียกว่าคีย์การรวมหรือคีย์ทั่วไป
MySQL รองรับการรวมประเภทต่อไปนี้:
ข้ามเข้าร่วม
อันที่จริง การเข้าร่วมแบบไขว้คือรูปแบบพื้นฐานของการรวม ถ้าเรามีสองตาราง มันจะนำแต่ละแถวของ table1 และผนวกเข้ากับแต่ละแถวของ table2 ดังนั้นหาก table1 มี 3 แถว และ table2 มี 2 แถว เราก็จะได้แถวทั้งหมด 6 แถวหลังจากเชื่อมตารางเหล่านี้เข้าด้วยกัน เพื่อให้เข้าใจ เรากำลังยกตัวอย่างของสองตารางชื่อ tbl_1 และ tbl_2 ซึ่งมีข้อมูลดังต่อไปนี้:
mysql> Select * from tbl_1; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Raman | | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from tbl_2; +----+---------+ | Id | Name | +----+---------+ | A | Aarav | | B | Mohan | | C | Jai | | D | Harshit | +----+---------+ 4 rows in set (0.00 sec)
ตอนนี้ แบบสอบถามด้านล่างจะทำ CROSS JOIN ระหว่างตารางที่กล่าวถึงข้างต้น
mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 CROSS JOIN tbl_2; +----+----+ | id | id | +----+----+ | 1 | A | | 2 | A | | 3 | A | | 4 | A | | 1 | B | | 2 | B | | 3 | B | | 4 | B | | 1 | C | | 2 | C | | 3 | C | | 4 | C | | 1 | D | | 2 | D | | 3 | D | | 4 | D | +----+----+ 16 rows in set (0.00 sec)
เข้าร่วมภายใน หรือ Equi เข้าร่วม
ในการสร้างการรวมภายใน เราจำเป็นต้องระบุเงื่อนไขเฉพาะที่เรียกว่า join-predicate การรวมภายในหรือ equi ที่จริงแล้วจำเป็นต้องมีแถวในตารางที่เข้าร่วมทั้งสองตารางเพื่อให้มีค่าคอลัมน์ที่ตรงกัน เพื่อให้เข้าใจ แบบสอบถามต่อไปนี้จะรวมตารางชื่อ 'tbl_1' และ 'tbl_2' เข้าด้วยกัน
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+----+ | id | id | +----+----+ | 4 | A | +----+----+ 1 row in set (0.00 sec)
ชุดผลลัพธ์แสดงว่าชื่อคอลัมน์มีค่าเหมือนกันสำหรับ id =4 ใน tbl_1 และสำหรับ id ='A' ใน tbl_2
เข้าร่วมทางซ้าย
จำเป็นต้องมี join-predicate สำหรับการเข้าร่วม Left เช่นเดียวกับการเข้าร่วมภายใน ข้อแตกต่างเพียงอย่างเดียวคือเมื่อเข้าร่วมสองตารางโดยใช้การรวม LEFT จะมีการแนะนำแนวคิดของตารางด้านซ้ายและตารางด้านขวา ส่งคืนแถวทั้งหมดในตารางด้านซ้ายรวมถึงแถวที่ตรงตามภาคแสดงการเข้าร่วมและแถวที่ไม่เป็นไปตามภาคแสดงการเข้าร่วม สำหรับแถวที่ไม่ตรงกับภาคแสดงการรวม NULL จะปรากฏในคอลัมน์ของตารางด้านขวาในชุดผลลัพธ์ เพื่อให้เข้าใจ ทำตามแบบสอบถามโดยใช้ตาราง tbl_1 และ tbl_2 ทำการเข้าร่วม LEFT:
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+------+ | id | id | +----+------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | A | +----+------+ 4 rows in set (0.02 sec)
เข้าร่วมทางขวา
คล้ายกับการรวม LEFT ยกเว้นว่าการรักษาตารางจะกลับกัน ด้วย RIGHT เข้าร่วมทุกแถวจากตารางด้านขวาจะปรากฏในชุดผลลัพธ์ สำหรับแถวในตารางด้านขวาที่ไม่มีแถวที่ตรงกันในตารางด้านซ้าย ค่า NULL จะปรากฏขึ้นสำหรับคอลัมน์ในตารางด้านซ้าย เพื่อให้เข้าใจ ทำตามแบบสอบถามโดยใช้ตาราง tbl_1 และ tbl_2 ทำการเข้าร่วม RIGHT:
mysql> SELECT tbl_1.id,tbl_2.id -> FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +------+----+ | id | id | +------+----+ | 4 | A | | NULL | B | | NULL | C | | NULL | D | +------+----+ 4 rows in set (0.00 sec)