Kết Nối Nhiều Bảng Dữ Liệu Bằng INNER JOIN & LEFT JOIN

F3545b21-1170-4cce-98fb-9b108ad665f7

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 KeyKhóa ngoại – Foreign Key).

Giả sử MCNA có 2 bảng:

  • Bảng HocVien: Chứa MaHV, HoTen, MaLop.

  • Bảng LopHoc: Chứa MaLop, 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ảng DonHang (MaDH, MaKH, TongTien).

  1. Viết câu lệnh hiển thị TenKH, MaDHTongTien của những khách hàng đã mua hàng (Dùng INNER JOIN).

  2. 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).

— Câu 1: Lấy danh sách khách hàng ĐÃ MUA HÀNG
SELECT kh.TenKH, dh.MaDH, dh.TongTien
FROM KhachHang kh
INNER JOIN DonHang dh
    ON kh.MaKH = dh.MaKH;
— Câu 2: Lấy TẤT CẢ khách hàng (kể cả chưa mua hàng)
SELECT kh.TenKH, dh.MaDH, dh.TongTien
FROM KhachHang kh
LEFT JOIN DonHang dh
    ON kh.MaKH = dh.MaKH;

 

 

 

 

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

Chỉ mục