Trong quá trình làm việc với cơ sở dữ liệu, việc ghép nối (JOIN) các bảng dữ liệu lại với nhau là điều không thể thiếu. JOIN là một phương thức cho phép kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên điều kiện đặt ra. Trong bài viết này, chúng ta sẽ cùng đi tìm hiểu về các loại JOIN phổ biến trong SQL như LEFT JOIN, RIGHT JOIN, INNER JOIN và FULL JOIN và khám phá sự khác biệt giữa chúng.
✏️ Left Join (hay Left Outer Join):
Left join trả về tất cả các giá trị từ bảng bên trái (left table) và các giá trị khớp từ bảng bên phải (right table). Nếu không có giá trị khớp trong bảng bên phải, các cột của bảng bên phải sẽ có giá trị NULL trong kết quả. Left join được sử dụng khi bạn muốn lấy toàn bộ dữ liệu từ bảng bên trái và các giá trị từ bảng bên phải.
Như ví dụ trong hình, ta muốn giữ nguyên bảng User và lắp các giá trị Month & Number of orders từ bảng Order vào. Kết quả User Hạnh (568WBA) sẽ không có dữ liệu về đơn hàng do không có mặt trong bảng bên phải. Ngoài ra User 003ODL có trong bảng Order nhưng không có trong bảng User cũng sẽ không xuất hiện trong kết quả cuối cùng.
✏️ Right Join (hay Right Outer Join):
Tương tự như thế, ta có Right Join (hay Right Outer Join), với mục đích giữ nguyên bảng bên phải và lấy các giá trị khớp từ bảng bên trái.
✏️ Inner Join:
Inner join chỉ trả về các giá trị khớp nhau trong cả 2 bảng.
Trong trường hợp này, chỉ có User Nam (134AXY) và Hoa (937NND) là có mặt ở cả hai bảng, nên kết quả chỉ trả về thông tin của 2 User này.
✏️ Full Join (hay Full Outer Join):
Full join trả về tất cả các bản ghi từ cả hai bảng, bao gồm cả các bản ghi khớp và không khớp. Nếu không có khớp, các cột từ bảng không có khớp sẽ có giá trị NULL trong kết quả. Full join được sử dụng khi bạn muốn lấy toàn bộ dữ liệu từ cả hai bảng và không bỏ sót bất kỳ bản ghi nào.
Tuy nhiên còn khá nhiều điểm cần chú ý khi sử dụng JOIN, chẳng hạn như việc chọn primary key (giá trị để join bảng), hay kết hợp các primary key với nhau,… Theo dõi các bài viết tiếp theo của DataStation để nâng cao kiến thức về mệnh đề JOIN nhé! 💪
Leave a Reply