Đăng nhập

Bài 19: RIGHT JOIN, FULL OUTER JOIN – Giải thích và khi nào sử dụng

Khi làm việc với nhiều bảng dữ liệu có mối quan hệ với nhau, việc kết hợp (JOIN) giúp chúng ta phân tích thông tin hiệu quả hơn. Trước đó, bạn đã học về INNER JOIN (lấy phần giao) và LEFT JOIN (giữ lại toàn bộ bảng bên trái). Tuy nhiên, sẽ có lúc bạn cần giữ lại toàn bộ bên phải – đó là lúc chúng ta dùng RIGHT JOIN. Còn nếu muốn lấy cả hai bên, dù có khớp hay không, bạn sẽ cần đến FULL OUTER JOIN.

Trong bài này, chúng ta sẽ cùng nhau phân biệt rõ hai loại JOIN này, biết cách dùng chúng trong thực tế, và giải thích vì sao đôi khi một kết quả có NULL cũng rất quan trọng.


RIGHT JOIN là gì?

RIGHT JOIN là phép kết hợp dữ liệu trong đó:

  • Trả về toàn bộ các dòng của bảng bên phải.
  • Nếu có dòng tương ứng ở bảng bên trái, dữ liệu sẽ được kết hợp.
  • Nếu không có dòng tương ứng, dữ liệu từ bảng bên trái sẽ là NULL.

Cú pháp:

SELECT *
FROM bảng_trái
RIGHT JOIN bảng_phải
ON bảng_trái.khoá = bảng_phải.khoá;

Ví dụ:

Giả sử bạn có hai bảng:

Lớp

id_lopten_lop
1Lớp 10A
2Lớp 10B

Học sinh

id_hsten_hsid_lop
1An1
2BìnhNULL
SELECT hs.ten_hs, l.ten_lop
FROM hoc_sinh hs
RIGHT JOIN lop l ON hs.id_lop = l.id_lop;

Kết quả:

ten_hsten_lop
AnLớp 10A
NULLLớp 10B

Lớp 10B không có học sinh, nhưng vẫn được hiện lên vì RIGHT JOIN giữ nguyên bảng phải (lop).


FULL OUTER JOIN là gì?

FULL OUTER JOIN sẽ kết hợp cả LEFT JOINRIGHT JOIN. Nó:

  • Trả về tất cả các dòng từ hai bảng.
  • Nếu không có khớp, phần không khớp sẽ là NULL.

Cú pháp:

Không phải mọi hệ quản trị CSDL đều hỗ trợ FULL OUTER JOIN trực tiếp (ví dụ: MySQL không hỗ trợ thẳng). Tuy nhiên, bạn có thể mô phỏng nó bằng UNION:

SELECT *
FROM bảng_trái
LEFT JOIN bảng_phải ON điều_kiện

UNION

SELECT *
FROM bảng_trái
RIGHT JOIN bảng_phải ON điều_kiện;

Khi nào dùng RIGHT JOIN và FULL OUTER JOIN?

JOIN loại gìKhi nào nên dùng
RIGHT JOINKhi bạn muốn giữ tất cả dữ liệu của bảng bên phải, kể cả khi không có đối tượng liên kết từ bảng bên trái
FULL OUTER JOINKhi bạn cần phân tích dữ liệu đầy đủ cả hai phía, kể cả các phần không khớp

Một vài ví dụ tình huống thực tế:

  • RIGHT JOIN: Liệt kê tất cả các lớp học, kể cả lớp chưa có học sinh.
  • FULL OUTER JOIN: Tổng hợp tất cả các sản phẩm và đơn hàng, kể cả sản phẩm chưa bán hoặc đơn hàng thiếu thông tin sản phẩm.

Lưu ý kỹ thuật

  • FULL OUTER JOIN không có sẵn trong MySQL → bạn phải dùng UNION giữa LEFT JOINRIGHT JOIN.
  • Cần sử dụng COALESCE() để xử lý giá trị NULL hợp lý khi hiển thị dữ liệu kết hợp.

Tổng kết

  • RIGHT JOIN giữ lại tất cả dữ liệu của bảng bên phải.
  • FULL OUTER JOIN kết hợp toàn bộ dữ liệu từ cả hai bảng, bất kể có khớp hay không.
  • Hiểu rõ khi nào cần phân tích toàn bộ dữ liệu giúp bạn dùng JOIN đúng lúc và tiết kiệm tài nguyên hệ thống.

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.