Chào mừng bạn tiếp tục hành trình trong chuỗi series tự học SQL cùng MCNA Technology School!
Trong thực tế, dữ liệu doanh nghiệp hiếm khi nằm gọn trong một bảng duy nhất. Thông tin học viên nằm ở bảng HocVien, còn tên lớp học lại nằm ở bảng LopHoc. Để tổng hợp thông tin từ nhiều nơi, bạn bắt buộc phải kết nối chúng lại.
Bài viết này sẽ giúp bạn làm chủ hai phép nối quan trọng nhất: INNER JOIN và LEFT JOIN trong SQL.
1. Khái Niệm Phép Nối (JOIN) Trong SQL
JOIN là kỹ thuật dùng để kết hợp các dòng từ hai hay nhiều bảng dựa trên một cột chung giữa chúng (thường là Khóa chính – Primary Key và Khóa ngoại – Foreign Key).
Giả sử MCNA có 2 bảng:
-
Bảng
HocVien: ChứaMaHV,HoTen,MaLop. -
Bảng
LopHoc: ChứaMaLop,TenLop,GiangVien.
Cột chung nối hai bảng này chính là MaLop.
2. Phân Biệt INNER JOIN Và LEFT JOIN Trong SQL
Đây là hai phép nối phổ biến nhất bạn sẽ dùng hàng ngày:
2.1. INNER JOIN (Nối trong – Chỉ lấy phần chung)
INNER JOIN chỉ trả về những dòng có sự trùng khớp ở cả hai bảng. Nếu một học viên chưa được phân lớp (hoặc một lớp chưa có học viên), dòng đó sẽ bị bỏ qua.
-
Cú pháp:
SQL
SELECT Bảng_A.cột1, Bảng_B.cột2
FROM Bảng_A
INNER JOIN Bảng_B
ON Bảng_A.cột_chung = Bảng_B.cột_chung;
-
Ví dụ thực tế:
Hiển thị tên học viên cùng tên lớp học mà học viên đó đã đăng ký:
SQL
SELECT HocVien.HoTen, LopHoc.TenLop
FROM HocVien
INNER JOIN LopHoc
ON HocVien.MaLop = LopHoc.MaLop;
2.2. LEFT JOIN (Nối trái – Lấy toàn bộ bảng bên trái)
LEFT JOIN trả về tất cả các dòng từ bảng bên trái (bảng nằm sau từ khóa FROM), và các dòng trùng khớp từ bảng bên phải. Nếu bảng bên phải không có dữ liệu khớp, kết quả sẽ hiển thị giá trị NULL.
-
Cú pháp:
SQL
SELECT Bảng_A.cột1, Bảng_B.cột2
FROM Bảng_A
LEFT JOIN Bảng_B
ON Bảng_A.cột_chung = Bảng_B.cột_chung;
-
Ví dụ thực tế:
Hiển thị tất cả học viên, kể cả những học viên mới chưa được xếp lớp:
SQL
SELECT HocVien.HoTen, LopHoc.TenLop
FROM HocVien
LEFT JOIN LopHoc
ON HocVien.MaLop = LopHoc.MaLop;
(Với học viên chưa có lớp, cột TenLop sẽ nhận giá trị NULL)
3. Bảng So Sánh Nhanh INNER JOIN Và LEFT JOIN
| Tiêu chí | INNER JOIN | LEFT JOIN |
| Dữ liệu trả về | Chỉ các dòng khớp nhau ở cả 2 bảng | Tất cả dòng bảng trái + dòng khớp bảng phải |
| Xử lý không khớp | Loại bỏ dòng không khớp | Giữ dòng bảng trái, điền NULL cho bảng phải |
| Khi nào sử dụng? | Khi chỉ muốn lấy dữ liệu hoàn chỉnh | Khi muốn bảo toàn toàn bộ danh sách bảng chính |
4. Mở Rộng: Cách Sử Dụng Alias (Tên Thay Thế)
Để câu lệnh JOIN ngắn gọn hơn, người ta thường dùng Alias (đặt tên viết tắt cho bảng):
SQL
-- Sử dụng 'hv' cho HocVien và 'l' cho LopHoc
SELECT hv.HoTen, l.TenLop
FROM HocVien hv
INNER JOIN LopHoc l
ON hv.MaLop = l.MaLop;
5. Bài Tập Thực Hành Học SQL
Hãy áp dụng kiến thức INNER JOIN và LEFT JOIN trong SQL để giải bài tập quản lý bán hàng dưới đây:
Đề bài: Cho bảng
KhachHang(MaKH,TenKH) và bảngDonHang(MaDH,MaKH,TongTien).
Viết câu lệnh hiển thị
TenKH,MaDHvàTongTiencủa những khách hàng đã mua hàng (DùngINNER JOIN).Viết câu lệnh hiển thị tất cả khách hàng kèm thông tin đơn hàng của họ, kể cả người chưa mua đơn nào (Dùng
LEFT JOIN).
Tác giả: Huỳnh Trung Hậu
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: MCNA Technology School
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

