Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL tham gia là gì?

Như chúng ta biết rằng MySQL SELECT có thể được sử dụng để truy xuất thông tin từ một bảng tại một thời điểm nhưng tất cả các câu hỏi không thể được trả lời chỉ bằng một bảng. Vì vậy, với mục đích đã nói ở trên, tức là lấy thông tin được lưu trữ trong nhiều bảng, chúng ta có thể sử dụng phép toán Tham gia.

Về cơ bản, MySQL join là một phương pháp liên kết dữ liệu từ hai hoặc nhiều bảng dựa trên các giá trị của cột chung giữa chúng, với kết quả là một bảng tạm thời mới. Nói cách khác, chúng ta có thể nói rằng một phép nối MySQL cho phép chúng ta truy xuất các bản ghi từ hai hoặc nhiều bảng có liên quan đến logic trong một bảng tạm thời mới. Bảng tạm thời mới được tạo dựa trên (các) cột mà hai bảng chia sẻ, biểu thị (các) cột có ý nghĩa so sánh.

Các giá trị chung thường là cùng một tên cột và kiểu dữ liệu xuất hiện trong cả bảng tham gia đang được nối. (Các) cột này được gọi là khóa kết hợp hoặc khóa chung.

MySQL hỗ trợ các kiểu nối sau:

Tham gia chéo

Trên thực tế, liên kết chéo là hình thức cơ bản của liên kết. Nếu chúng ta có hai bảng, nó lấy mỗi hàng của bảng1 và nối nó vào mỗi hàng của bảng2. Do đó nếu table1 có 3 hàng và table2 có 2 hàng thì chúng ta sẽ nhận được tổng cộng 6 hàng sau khi kết hợp chéo các bảng này. Để hiểu nó, chúng tôi đang lấy ví dụ về hai bảng có tên tbl_1 và tbl_2 có dữ liệu sau:

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)

Bây giờ, truy vấn bên dưới sẽ thực hiện CROSS JOIN giữa các bảng được đề cập ở trên.

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)

Tham gia bên trong hoặc Trang bị tham gia

Để tạo một phép nối bên trong, chúng ta cần chỉ định một điều kiện cụ thể được gọi là vị từ nối. Trên thực tế, phép nối bên trong hoặc phép nối trang bị cần các hàng trong hai bảng đã nối để có giá trị cột phù hợp. Để hiểu nó, truy vấn sau sẽ nối các bảng có tên ‘tbl_1’ và ‘tbl_2’ bên trong.

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)

Tập kết quả cho thấy rằng tên cột có các giá trị giống nhau cho id =4 trong tbl_1 và cho id =‘A’ trong tbl_2.

Tham gia trái

Một vị từ nối cũng được yêu cầu cho phép nối Trái như được yêu cầu trong phép nối bên trong. Chỉ khác là khi nối hai bảng bằng phép nối TRÁI, khái niệm bảng bên trái và bảng bên phải được giới thiệu. Nó trả về tất cả các hàng trong bảng bên trái bao gồm các hàng thỏa mãn vị từ nối và cả các hàng không thỏa mãn vị từ nối. Đối với các hàng không khớp với vị từ nối, NULL xuất hiện trong cột của bảng bên phải trong tập kết quả. Để hiểu nó, sau truy vấn sử dụng bảng tbl_1 và tbl_2 thực hiện phép nối TRÁI:

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)

Tham gia phù hợp

Nó tương tự như phép nối TRÁI ngoại trừ việc xử lý các bảng được đảo ngược. Với một phép tham gia ĐÚNG, mọi hàng từ bảng bên phải sẽ xuất hiện trong tập kết quả. Đối với các hàng trong bảng bên phải không có các hàng phù hợp trong bảng bên trái, NULL xuất hiện cho các cột trong bảng bên trái. Để hiểu nó, sau truy vấn bằng cách sử dụng bảng tbl_1 và tbl_2 thực hiện phép nối 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)