Mệnh đề Joins trong SQL được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong một Database. Một JOIN là một phương tiện để kết hợp các trường từ hai bảng bằng việc sử dụng các giá trị chung của mỗi bảng.

Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4000000       |
|  2 | Viet    |  19 | DTVT      | 3000000     |
|  3 | Thanh   |  18 | KTDN      |  4000000      |
|  4 | Nhan    |  19 | CK        |   4500000   |
|  5 | Huong   |  20 | TCNH      |   5000000     |
+----+---------+-----+-----------+---------+

Bảng MUONSACH có các bản ghi sau:

+-----+---------------------+-------------+--------+
|STT  | NGAY                | SINHVIEN_ID | SOTIEN |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   320 |
| 100 | 2009-10-08 00:00:00 |           3 |   250 |
| 101 | 2009-11-20 00:00:00 |           2 |   280 |
| 103 | 2008-05-20 00:00:00 |           4 |   290 |
+-----+---------------------+-------------+--------+

Bây giờ, chúng ta kết hợp hai bảng này trong lệnh SELECT như sau:

SQL> SELECT ID, TEN, TUOI, SOTIEN
        FROM SINHVIEN, MUONSACH
        WHERE  SINHVIEN.ID = MUONSACH.SINHVIEN_ID;

Ví dụ trên sẽ cho kết quả:

+----+----------+-----+--------+
| ID | TEN     | TUOI | SOTIEN |
+----+----------+-----+--------+
|  3 | Thanh  |  18 |   320 |
|  3 | Thanh  |  18 |   250 |
|  2 | Viet   |  19 |   280 |
|  4 | Nhan |  19 |   290 |
+----+----------+-----+--------+

Ở đây, điều đáng chú ý là, JOIN được thực hiện trong mệnh đề WHERE. Một số toán tử có thể được sử dụng để kết hợp các bảng là: =, <, >, <>, <=, >=, !=, BETWEEN, LIKE, và NOT; tất cả toán tử này có thể được sử dụng để kết hợp các bảng. Tuy nhiên, toán tử được sử dụng phổ biến nhất là dấu bằng (=).

Các loại JOIN trong SQL

Trong SQL, có một số loại JOIN có sẵn là:

  • INNER JOIN trong SQL: Trả về các hàng khi có một so khớp (match) trong các bảng.

  • LEFT JOIN trong SQL: Trả về tất cả các hàng từ bảng bên trái, ngay cả khi không có so khớp nào trong bảng bên phải.

  • RIGHT JOIN trong SQL: Trả về tất cả các hàng từ bảng bên phải, ngay cả khi không có so khớp nào trong bảng bên trái.

  • FULL JOIN trong SQL: Trả về các hàng khi có một so khớp ở một trong các bảng.

  • SELF JOIN trong SQL: Được sử dụng để kết hợp một bảng với chính nó, khi nếu table đó là hai bảng dữ liệu, thay tên tạm thời cho ít nhất một bảng trong lệnh SQL.

  • CARTESIAN JOIN trong SQL: Trả về tích Đề-các của tập hợp các bản ghi từ hai hoặc nhiều bảng kết hợp.

MySQL hỗ trợ nhiều loại JOIN để kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên các điều kiện cụ thể. Dưới đây là các loại JOIN chính mà MySQL hỗ trợ:

  1. INNER JOIN
  2. LEFT JOIN (hoặc LEFT OUTER JOIN)
  3. RIGHT JOIN (hoặc RIGHT OUTER JOIN)
  4. CROSS JOIN
  5. NATURAL JOIN
  6. SELF JOIN
  7. STRAIGHT JOIN

1. INNER JOIN

INNER JOIN trả về các hàng khi có ít nhất một cặp cột khớp nhau trong cả hai bảng. Đây là loại JOIN phổ biến nhất.

Ví dụ:

SELECT students.id, students.name, courses.course
FROM students
INNER JOIN courses ON students.id = courses.student_id;​

2. LEFT JOIN (LEFT OUTER JOIN)

LEFT JOIN trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nếu không có kết quả khớp, các giá trị của bảng bên phải sẽ là NULL.

Ví dụ:

SELECT students.id, students.name, courses.course
FROM students
LEFT JOIN courses ON students.id = courses.student_id;​

3. RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOIN trả về tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái. Nếu không có kết quả khớp, các giá trị của bảng bên trái sẽ là NULL.

Ví dụ:

SELECT students.id, students.name, courses.course
FROM students
RIGHT JOIN courses ON students.id = courses.student_id;​

4. CROSS JOIN

CROSS JOIN trả về tích Descartes của các hàng trong hai bảng. Kết quả của CROSS JOIN không phụ thuộc vào điều kiện JOIN.

Ví dụ:

SELECT students.name, courses.course
FROM students
CROSS JOIN courses;​

5. NATURAL JOIN

NATURAL JOIN là một loại INNER JOIN đặc biệt, tự động liên kết các cột có cùng tên trong hai bảng. Nó loại bỏ các cột trùng lặp trong kết quả.

Ví dụ:

SELECT *
FROM students
NATURAL JOIN courses;​

6. SELF JOIN

SELF JOIN là một loại JOIN trong đó bảng được JOIN với chính nó. Điều này có thể hữu ích khi bạn muốn so sánh các hàng trong cùng một bảng.

Ví dụ:

SELECT a.name AS name1, b.name AS name2
FROM students a
INNER JOIN students b ON a.id = b.id;​

7. STRAIGHT JOIN

STRAIGHT JOIN là một loại JOIN giống như INNER JOIN, nhưng với một khác biệt quan trọng: MySQL sẽ đọc bảng bên trái trước, bất kể cách nào MySQL tối ưu hóa truy vấn.

Ví dụ:

SELECT students.id, students.name, courses.course
FROM students
STRAIGHT JOIN courses ON students.id = courses.student_id;​

Kết luận

MySQL hỗ trợ nhiều loại JOIN để bạn có thể linh hoạt trong việc truy vấn và kết hợp dữ liệu từ các bảng khác nhau. Hiểu rõ cách mỗi loại JOIN hoạt động sẽ giúp bạn viết các truy vấn SQL hiệu quả hơn và tận dụng tối đa các khả năng của MySQL.




Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Learning English Everyday