Trong bài viết trước, chúng ta đã cùng nhau tìm hiểu về các câu lệnh truy vấn cơ bản trong SQL như DISTINCT, WHERE, AND, OR, COUNT, ORDER BY, GROUP BY, và HAVING. Tiếp nối chủ đề này, hôm nay chúng ta sẽ đi sâu hơn về một kỹ thuật quan trọng khác: SQL JOIN và các loại JOIN khác nhau.
JOIN là một phép toán cho phép kết hợp dữ liệu từ hai hoặc nhiều bảng lại với nhau. Khi bạn cần truy vấn dữ liệu từ nhiều bảng khác nhau và hiển thị chúng trong cùng một tập kết quả, JOIN chính là giải pháp tối ưu. Điều kiện tiên quyết để kết nối hai bảng là phải có ít nhất một trường chung giữa chúng.
Các Loại Câu Lệnh SQL JOIN
Dưới đây là các loại JOIN phổ biến nhất trong SQL:
1. INNER JOIN (hoặc JOIN)
INNER JOIN (hoặc đơn giản là JOIN) trả về tất cả các hàng khi có ít nhất một giá trị khớp giữa hai bảng. Nói cách khác, nó chỉ trả về các hàng có giá trị ở cả hai bảng thỏa mãn điều kiện kết nối.
INNER JOIN trong SQL
2. LEFT OUTER JOIN (hoặc LEFT JOIN)
LEFT OUTER JOIN (hoặc 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ó hàng nào khớp ở bảng bên phải, nó sẽ trả về giá trị NULL cho các cột của bảng bên phải. Điều này đảm bảo rằng tất cả các hàng từ bảng bên trái đều được bao gồm trong kết quả.
LEFT JOIN trong SQL
3. RIGHT OUTER JOIN (hoặc RIGHT JOIN)
RIGHT OUTER JOIN (hoặc RIGHT JOIN) hoạt động tương tự như LEFT JOIN, nhưng ngược lại. Nó 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ó hàng nào khớp ở bảng bên trái, nó sẽ trả về giá trị NULL cho các cột của bảng bên trái.
RIGHT JOIN trong SQL
4. FULL OUTER JOIN (hoặc OUTER JOIN)
FULL OUTER JOIN (hoặc OUTER JOIN) trả về tất cả các hàng từ cả hai bảng. Nếu có hàng nào không khớp ở một trong hai bảng, nó sẽ trả về giá trị NULL cho các cột của bảng đó. Về cơ bản, nó là sự kết hợp của LEFT JOIN và RIGHT JOIN.
FULL OUTER JOIN trong SQL
Ví Dụ Cụ Thể về Các Câu Lệnh JOIN
Để hiểu rõ hơn về cách sử dụng các câu lệnh JOIN, chúng ta sẽ xem xét một số ví dụ cụ thể.
2.1. Câu Lệnh INNER JOIN
INNER JOIN trả về kết quả là các bản ghi mà trường được join giữa hai bảng khớp nhau. Các bản ghi chỉ xuất hiện ở một trong hai bảng sẽ bị loại bỏ. Bạn có thể sử dụng JOIN thay cho INNER JOIN vì chúng có ý nghĩa và kết quả tương đương.
Cú pháp:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Ví dụ:
Giả sử chúng ta có hai bảng: khach_hang (khách hàng) và order_kh (đơn hàng của khách hàng).
Bảng khach_hang:
Bảng khach_hang
Bảng order_kh:
Bảng order_kh
Trong hai bảng này, MaKH (mã khách hàng) là trường chung, đại diện cho mã khách hàng ở bảng khach_hang. Mối quan hệ giữa hai bảng được thiết lập thông qua cột MaKH.
Câu lệnh SQL JOIN sau đây sẽ lấy ra thông tin từ cả hai bảng, kết hợp dựa trên MaKH:
SELECT *
FROM khach_hang AS KH
JOIN order_kh AS OD ON KH.MaKH = OD.MaKH;
Kết quả trả về sẽ là một bảng chứa thông tin chi tiết về khách hàng và các đơn hàng tương ứng của họ:
Kết quả INNER JOIN
2.2. Câu Lệnh LEFT OUTER JOIN
LEFT OUTER JOIN trả về tất cả các hàng từ bảng bên trái (table1) và các hàng tương ứng từ bảng bên phải (table2). Nếu không tìm thấy hàng tương ứng ở bảng bên phải, các cột của bảng bên phải sẽ chứa giá trị NULL.
Cú pháp:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Ví dụ:
Sử dụng lại hai bảng khach_hang và order_kh từ ví dụ trên, câu lệnh LEFT JOIN sẽ trả về tất cả khách hàng từ bảng khach_hang, cùng với thông tin đơn hàng tương ứng (nếu có) từ bảng order_kh.
SELECT *
FROM khach_hang AS KH
LEFT JOIN order_kh AS OD ON KH.MaKH = OD.MaKH;
2.3. Câu Lệnh RIGHT OUTER JOIN
RIGHT OUTER JOIN hoạt động tương tự như LEFT OUTER JOIN, nhưng trả về tất cả các hàng từ bảng bên phải (table2) và các hàng tương ứng từ bảng bên trái (table1). Nếu không tìm thấy hàng tương ứng ở bảng bên trái, các cột của bảng bên trái sẽ chứa giá trị NULL.
Cú pháp:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Bạn hãy thử tự chạy câu lệnh RIGHT JOIN với dữ liệu từ hai bảng khach_hang và order_kh để hiểu rõ hơn về cách nó hoạt động!
2.4. Câu Lệnh FULL OUTER JOIN
FULL OUTER JOIN là sự kết hợp của LEFT JOIN và RIGHT JOIN. Nó trả về tất cả các hàng từ cả hai bảng, điền giá trị NULL vào các cột của bảng không có hàng tương ứng.
Cú pháp:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
Trong quá trình thực hành, bạn có thể kết hợp các câu lệnh JOIN với các câu lệnh SQL khác như DISTINCT, WHERE, AND, OR, COUNT, ORDER BY, GROUP BY, HAVING,… để truy vấn dữ liệu theo yêu cầu cụ thể. Việc tìm hiểu sâu hơn và kết hợp linh hoạt giữa các câu lệnh sẽ giúp bạn thực hành tốt hơn và áp dụng hiệu quả vào công việc thực tế.
Để nâng cao kỹ năng sử dụng SQL, bạn có thể tham khảo thêm các tài liệu và bài tập trực tuyến. Chúc bạn thành công!
