Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL เข้าร่วมคืออะไร?


อย่างที่เราทราบดีว่า 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)