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ác loại JOIN trong SQL

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ả.

Các loại JOIN trong SQL

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.

Các loại JOIN trong SQL

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.

Các loại JOIN trong SQL

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.

Các loại JOIN trong SQL

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!