Các loại JOIN trong SQL: 4 loại cơ bản nhất trong SQL Server
- 2025-05-08 09:30:29
Trong quá trình làm việc với cơ sở dữ liệu, đặc biệt là trong môi trường SQL, bạn thường phải lấy dữ liệu từ nhiều bảng khác nhau để tổng hợp, phân tích hoặc hiển thị. Lúc này, các loại JOIN trong SQL chính là công cụ đắc lực giúp bạn kết nối và truy xuất dữ liệu một cách linh hoạt, chính xác.
Để hiểu rõ hơn về từng câu lệnh JOIN trong SQL và cách sử dụng chúng trong thực tế, hãy cùng AntBook tìm hiểu chi tiết qua bài viết dưới đây nhé!
1. Tổng hợp đầy đủ các loại JOIN trong SQL
Trong cơ sở dữ liệu quan hệ như SQL Server, Oracle, MySQL…, dữ liệu thường được lưu trữ trong nhiều bảng khác nhau. Các bảng này có thể liên kết với nhau thông qua một khóa chung (thường là khóa chính và khóa ngoại). Vì vậy, khi truy xuất thông tin, chúng ta thường cần kết hợp dữ liệu từ hai hoặc nhiều bảng để tạo ra kết quả đầy đủ và có ý nghĩa. Đó là lúc các câu lệnh JOIN trong SQL phát huy tác dụng.
Câu lệnh JOIN trong SQL giúp lập trình viên truy xuất dữ liệu từ nhiều bảng liên quan và gom chúng lại thành một bảng kết quả. Thông thường, các bảng có liên kết logic thông qua foreign key (khóa chính). Việc sử dụng JOIN kết hợp với lệnh SELECT và điều kiện JOIN giúp xác định cách các bảng được liên kết với nhau và dữ liệu nào sẽ được chọn.
Câu lệnh JOIN trong SQL giúp lập trình viên truy xuất dữ liệu từ nhiều bảng liên quan
Tổng hợp các lệnh JOIN trong SQL:
- INNER JOIN (hoặc JOIN)
Lệnh INNER JOIN để lấy ra các dòng dữ liệu chỉ khi có giá trị khớp ở cả hai bảng. Lệnh này thường dùng khi bạn chỉ muốn lấy những thông tin có trong cả hai bảng.
- LEFT OUTER JOIN (hoặc LEFT JOIN)
LEFT OUTER JOIN trả về tất cả các dòng từ bảng bên trái, và chỉ lấy dữ liệu từ bảng bên phải nếu có giá trị khớp với điều kiện JOIN. Nếu không khớp, các cột từ bảng bên phải sẽ được điền giá trị NULL.
Lệnh này dùng khi bạn muốn giữ nguyên dữ liệu từ bảng bên trái, kể cả khi không có dữ liệu tương ứng ở bảng bên phải.
- RIGHT OUTER JOIN (hoặc RIGHT JOIN)
Ngược lại với LEFT JOIN, RIGHT OUTER JOIN trả về tất cả các dòng từ bảng bên phải, và chỉ lấy dữ liệu từ bảng bên trái nếu có khớp. Nếu không có, dữ liệu bên trái sẽ là NULL.
Lệnh này dùng khi muốn ưu tiên dữ liệu từ bảng bên phải.
- FULL OUTER JOIN (hoặc OUTER JOIN)
FULL OUTER JOIN trả về tất cả các dòng từ cả hai bảng. Nếu dữ liệu không khớp, giá trị tương ứng từ bảng còn lại sẽ là NULL.
Lệnh này dùng khi bạn muốn lấy tất cả dữ liệu từ hai bảng, kể cả những dòng không có giá trị tương ứng.
Để hiểu chi tiết về các câu lệnh JOIN trong SQL, hãy để AntBook hướng dẫn bạn, kèm ví dụ thực tế dưới đây nhé!
2. Câu lệnh INNER JOIN trong SQL và ví dụ
INNER JOIN dùng để kết hợp các bản ghi từ hai bảng khi giá trị ở cột liên kết (thường là khóa chính – khóa ngoại) khớp nhau. Nếu không có giá trị khớp, các dòng đó sẽ bị loại bỏ khỏi kết quả.
INNER JOIN dùng để kết hợp các bản ghi từ hai bảng khi giá trị ở cột liên kết khớp nhau
Cú pháp INNER JOIN
SELECT TenCot1, TenCot2, …
FROM Bang1
INNER JOIN Bang2
ON Bang1.TenCotKhoa = Bang2.TenCotKhoa;
Ví dụ cụ thể về lệnh INNER JOIN trong SQL
Giả sử bạn có hai bảng:
Bảng KhachHang
MaKH |
TenKH |
SDT |
1 |
Nguyễn Văn A |
0901234567 |
2 |
Trần Thị B |
0912345678 |
3 |
Lê Văn C |
0923456789 |
Bảng DonHang
MaDH |
MaKH |
NgayDat |
TongTien |
101 |
1 |
2024-06-01 |
2,000,000 |
102 |
2 |
2024-06-03 |
3,500,000 |
103 |
1 |
2024-06-10 |
1,200,000 |
104 |
4 |
2024-06-12 |
5,000,000 |
Mục tiêu: Lấy danh sách tên khách hàng, mã đơn hàng và tổng tiền của những đơn hàng có khách hàng tồn tại trong bảng KhachHang.
Câu lệnh SQL sử dụng INNER JOIN:
SELECT KhachHang.TenKH, DonHang.MaDH, DonHang.TongTien
FROM KhachHang
INNER JOIN DonHang
ON KhachHang.MaKH = DonHang.MaKH;
Lưu ý: Đơn hàng có MaDH = 104 sẽ bị loại bỏ vì MaKH = 4 không tồn tại trong bảng KhachHang.
Kết quả trả về:
TenKH |
MaDH |
TongTien |
Nguyễn Văn A |
101 |
2,000,000 |
Trần Thị B |
102 |
3,500,000 |
Nguyễn Văn A |
103 |
1,200,000 |
3. Câu lệnh LEFT JOIN trong SQL và cách dùng
LEFT JOIN (hay LEFT OUTER JOIN) sẽ trả về tất cả các bản ghi từ bảng bên trái, kể cả khi không có bản ghi tương ứng ở bảng bên phải. Nếu không tìm thấy dữ liệu khớp, các cột từ bảng bên phải sẽ hiển thị giá trị NULL.
LEFT JOIN sẽ trả về tất cả các bản ghi từ bảng bên trái
Cú pháp câu lệnh Left JOIN trong SQL
SELECT TenCot1, TenCot2, …
FROM BangTrai
LEFT JOIN BangPhai
ON BangTrai.KhoaChinh = BangPhai.KhoaNgoai;
Ví dụ cụ thể về lệnh LEFT OUTER JOIN trong SQL
Giả sử bạn có hai bảng:
Bảng KhachHang
MaKH |
TenKH |
SDT |
1 |
Nguyễn Văn A |
0901234567 |
2 |
Trần Thị B |
0912345678 |
3 |
Lê Văn C |
0923456789 |
Bảng DonHang
MaDH |
MaKH |
NgayDat |
TongTien |
101 |
1 |
2024-06-01 |
2,000,000 |
102 |
2 |
2024-06-03 |
3,500,000 |
103 |
1 |
2024-06-10 |
1,200,000 |
Mục tiêu: Hiển thị tên khách hàng, mã đơn hàng, và tổng tiền, kể cả những khách hàng chưa từng đặt đơn hàng.
Câu lệnh SQL sử dụng LEFT JOIN trong SQL:
SELECT KhachHang.TenKH, DonHang.MaDH, DonHang.TongTien
FROM KhachHang
LEFT JOIN DonHang
ON KhachHang.MaKH = DonHang.MaKH;
Kết quả trả về:
TenKH |
MaDH |
TongTien |
Nguyễn Văn A |
101 |
2,000,000 |
Nguyễn Văn A |
103 |
1,200,000 |
Trần Thị B |
102 |
3,500,000 |
Lê Văn C |
NULL |
NULL |
Giải thích: Khách hàng Lê Văn C (MaKH = 3) chưa từng đặt đơn hàng nào, nhưng vẫn xuất hiện trong kết quả với cột đơn hàng là NULL.
4. Câu lệnh RIGHT OUTER JOIN trong SQL
RIGHT JOIN (hay RIGHT OUTER JOIN) sẽ trả về tất cả các bản ghi từ bảng bên phải, kể cả khi không có bản ghi tương ứng ở bảng bên trái. Nếu không tìm thấy dữ liệu khớp, các cột từ bảng bên trái sẽ hiển thị giá trị NULL.
RIGHT JOIN sẽ trả về tất cả các bản ghi từ bảng bên trái
Cú pháp RIGHT JOIN
SELECT TenCot1, TenCot2, …
FROM BangTrai
RIGHT JOIN BangPhai
ON BangTrai.KhoaChinh = BangPhai.KhoaNgoai;
Ví dụ cụ thể về lệnh RIGHT JOIN trong SQL
Giả sử bạn có 2 bảng giống như ví dụ trước:
Bảng KhachHang
MaKH |
TenKH |
SDT |
1 |
Nguyễn Văn A |
0901234567 |
2 |
Trần Thị B |
0912345678 |
Bảng DonHang
MaDH |
MaKH |
NgayDat |
TongTien |
101 |
1 |
2024-06-01 |
2,000,000 |
102 |
2 |
2024-06-03 |
3,500,000 |
103 |
3 |
2024-06-05 |
1,800,000 |
Mục tiêu: Hiển thị thông tin mã đơn hàng, tổng tiền, và tên khách hàng, kể cả những đơn hàng không có thông tin khách hàng trong bảng KhachHang.
Câu lệnh SQL sử dụng RIGHT JOIN:
SELECT DonHang.MaDH, DonHang.TongTien, KhachHang.TenKH
FROM KhachHang
RIGHT JOIN DonHang
ON KhachHang.MaKH = DonHang.MaKH;
Kết quả trả về:
MaDH |
TongTien |
TenKH |
101 |
2,000,000 |
Nguyễn Văn A |
102 |
3,500,000 |
Trần Thị B |
103 |
1,800,000 |
NULL |
Giải thích: Đơn hàng có MaKH = 3 không tìm thấy khách hàng trong bảng KhachHang, nên phần tên khách hàng sẽ hiển thị là NULL.
5. Câu lệnh FULL OUTER JOIN là gì?
FULL OUTER JOIN (hay gọi tắt là FULL JOIN) sẽ trả về tất cả các bản ghi từ cả hai bảng, dù có khớp dữ liệu hay không. Nếu không có dữ liệu tương ứng ở một bên, phần dữ liệu đó sẽ được hiển thị là NULL.
FULL OUTER JOIN sẽ trả về tất cả các bản ghi từ cả hai bảng
Cú pháp FULL JOIN
SELECT TenCot1, TenCot2, …
FROM Bang1
FULL OUTER JOIN Bang2
ON Bang1.KhoaChinh = Bang2.KhoaNgoai;
Ví dụ cụ thể về lệnh FULL OUTER JOIN
Bảng KhachHang
MaKH |
TenKH |
1 |
Nguyễn Văn A |
2 |
Trần Thị B |
4 |
Lê Văn C |
Bảng DonHang
MaDH |
MaKH |
TongTien |
101 |
1 |
2,000,000 |
102 |
2 |
3,500,000 |
103 |
3 |
1,800,000 |
Mục tiêu: Hiển thị thông tin mã khách hàng, tên khách hàng, mã đơn hàng và tổng tiền, kể cả khi khách hàng không có đơn hàng hoặc đơn hàng không có thông tin khách hàng.
Câu lệnh SQL:
SELECT KhachHang.MaKH, KhachHang.TenKH, DonHang.MaDH, DonHang.TongTien
FROM KhachHang
FULL OUTER JOIN DonHang
ON KhachHang.MaKH = DonHang.MaKH;
Kết quả trả về:
MaKH |
TenKH |
MaDH |
TongTien |
1 |
Nguyễn Văn A |
101 |
2,000,000 |
2 |
Trần Thị B |
102 |
3,500,000 |
4 |
Lê Văn C |
NULL |
NULL |
3 |
NULL |
103 |
1,800,000 |
Giải thích: Khách hàng mã 4 không có đơn hàng → cột MaDH và TongTien là NULL. Đơn hàng mã 103 không có thông tin khách hàng → cột MaKH và TenKH là NULL.
Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về các loại JOIN trong SQL cũng như cách sử dụng chúng để kết nối và truy xuất dữ liệu hiệu quả từ nhiều bảng. JOIN là một kỹ năng quan trọng, không chỉ giúp tối ưu hóa truy vấn mà còn là nền tảng không thể thiếu trong phân tích dữ liệu thực tế.
Nếu bạn muốn tìm hiểu sâu hơn về lĩnh vực xử lý dữ liệu, hãy khám phá ngay bộ sách Data Analysis từ cơ bản đến nâng cao tại AntBook. Bộ sách được biên soạn bởi các chuyên gia giàu kinh nghiệm, in màu sắc nét, kèm video hướng dẫn dễ hiểu, giúp bạn học tập một cách bài bản và ứng dụng thực tế. Mua ngay hôm nay để sớm làm chủ kỹ năng phân tích dữ liệu cùng AntBook!