Chuyển đến nội dung chính

SQL INNER JOIN so với OUTER JOIN: Những khác biệt chính

Hiểu SQL INNER JOIN và OUTER JOIN với ví dụ và hình minh họa để nâng cao kỹ năng quản trị cơ sở dữ liệu của bạn.
Đã cập nhật 5 thg 6, 2026  · 4 phút đọc

Trong hướng dẫn này, tôi sẽ giải thích sự khác nhau giữa SQL INNER JOINOUTER JOIN kèm ví dụ minh họa. Sau khi bạn nắm được nội dung này, bạn có thể muốn tham gia khóa học Joining Data in SQL của chúng tôi, khóa này còn đề cập đến các kiểu join thú vị khác như SELF JOINCROSS JOIN, cũng như những khái niệm rộng hơn như lý thuyết tập hợp.

Câu trả lời nhanh

INNER JOIN chỉ trả về các hàng khớp giữa các bảng dựa trên một cột chung, loại trừ các hàng không khớp. Ví dụ, truy vấn dưới đây chỉ hiển thị đơn hàng kèm chi tiết khách hàng khi có sự khớp.

-- Inner Join: Returns only matching rows from both tables
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;

OUTER JOIN bao gồm cả các hàng khớp và không khớp từ một hoặc cả hai bảng. Truy vấn dưới đây trả về tất cả khách hàng, bao gồm cả những người không có đơn hàng.

-- Left Outer Join: Returns all rows from Customers and matching rows from Orders
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

Xem kỹ SQL INNER JOIN và OUTER JOIN

Giờ hãy xem chi tiết SQL INNER JOINOUTER JOIN, từng loại một. Khi xem từng loại, hãy cân nhắc hai bảng sau:

Ví dụ bảng employees.

Ví dụ bảng employees. Ảnh: Tác giả.

Ví dụ bảng departments.

Ví dụ bảng departments. Ảnh: Tác giả.

Cách hoạt động của INNER JOIN

Một INNER JOIN chỉ truy xuất các hàng có khớp ở cả hai bảng dựa trên điều kiện chỉ định. 

Truy vấn sau chọn employee_id, demployee_name, department_namesalary rồi trả về các hàng nơi department_id tồn tại.

-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;

Ví dụ bảng được gộp bằng SQL INNER JOIN.

Ví dụ bảng được gộp bằng SQL INNER JOIN. Ảnh: Tác giả.

Cách hoạt động của OUTER JOIN

OUTER JOIN bao gồm các hàng không khớp từ một hoặc cả hai bảng, tùy thuộc vào loại OUTER JOIN được dùng.

LEFT OUTER JOIN (LEFT JOIN)

LEFT OUTER JOIN trả về tất cả bản ghi từ bảng bên trái và các bản ghi khớp từ bảng bên phải. Nếu không có khớp, các cột từ bảng bên phải sẽ nhận giá trị NULL.

Ví dụ sau truy xuất tất cả bản ghi từ bảng employees, kể cả nơi có bản ghi không khớp. department_name bị thiếu của nhân viên sẽ trả về NULL.

-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

Ví dụ bảng được join bằng SQL left outer join

Ví dụ bảng được join bằng SQL left outer join. Ảnh: Tác giả.

LEFT JOIN và LEFT OUTER JOIN được dùng thay thế cho nhau trong SQL vì cả hai truy vấn đều lấy tất cả hàng từ bảng bên trái và các hàng khớp từ bảng bên phải.

RIGHT OUTER JOIN (RIGHT JOIN)

RIGHT OUTER JOIN trả về tất cả bản ghi từ bảng bên phải và các bản ghi khớp từ bảng bên trái. Các hàng không khớp ở bảng bên trái sẽ trả về NULL.

Truy vấn dưới đây trả về tất cả bản ghi từ bảng departments, kể cả nơi không có nhân viên khớp.

-- Get all departments, even those without employees
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;

Ví dụ bảng được join bằng SQL Right outer join.

Ví dụ bảng được join bằng SQL Right outer join. Ảnh: Tác giả.

FULL OUTER JOIN

FULL OUTER JOIN kết hợp kết quả từ cả left và right outer join. Nó trả về tất cả bản ghi từ cả hai bảng, điền NULL ở nơi không có khớp.

Truy vấn dưới đây trả về tất cả bản ghi của bảng employeesdepartments, kể cả các hàng không khớp.

-- Combine all employees and departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;

Ví dụ bảng được join bằng SQL Full outer join.

Ví dụ bảng được join bằng SQL Full outer join. Ảnh: Tác giả.

INNER JOIN so với OUTER JOIN: Những khác biệt chính

INNER JOINOUTER JOIN khác nhau căn bản ở cách xử lý các hàng không khớp khi gộp bảng. Hiểu rõ những khác biệt này rất quan trọng để chọn đúng loại join trong truy vấn cơ sở dữ liệu của bạn. Hãy cùng so sánh.

INNER JOIN trả về gì

INNER JOIN chỉ trả về các hàng có giá trị khớp ở cả hai bảng. Kiểu join này dùng khi bạn cần dữ liệu xuất hiện ở cả hai tập dữ liệu.

Truy vấn sau truy xuất các bản ghi từ employees với các hàng khớp từ bảng departments.

-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;

Ví dụ bảng được join bằng SQL Inner join.

Ví dụ bảng được join bằng SQL INNER JOIN. Ảnh: Tác giả.

OUTER JOIN trả về gì

OUTER JOIN bao gồm các hàng không khớp từ một hoặc cả hai bảng, tùy thuộc vào loại OUTER JOIN. Ví dụ, LEFT OUTER JOIN trả về tất cả hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Các hàng không khớp từ bảng bên phải sẽ có giá trị NULL.

Truy vấn sau truy xuất bản ghi nhân viên, kể cả những người không thuộc phòng ban nào.

-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

Ví dụ dữ liệu truy xuất bằng SQL Left outer join.

Ví dụ dữ liệu truy xuất bằng SQL LEFT OUTER JOIN. Ảnh: Tác giả.

Khi nào dùng SQL INNER JOIN và OUTER JOIN

INNER JOINOUTER JOIN cũng khác nhau về các tình huống sử dụng thực tế trong truy xuất dữ liệu.

Khi nào dùng INNER JOIN

INNER JOIN hiệu quả nhất khi bạn chỉ cần dữ liệu giao nhau từ hai bảng. Ví dụ, bạn có thể dùng INNER JOIN khi phân tích dữ liệu bán hàng để tìm các sản phẩm đã được bán, tức là khi cả bảng sản phẩm và bảng bán hàng đều có bản ghi khớp.

Khi nào dùng OUTER JOIN

OUTER JOIN phù hợp khi bạn cần trả về bộ dữ liệu đầy đủ, bao gồm cả các hàng không khớp. Chẳng hạn, khi tạo báo cáo liệt kê tất cả nhân viên, kể cả những người chưa được gán phòng ban, hoặc tất cả phòng ban, kể cả những phòng ban chưa có nhân viên.

Kết luận

Hiểu sự khác nhau giữa INNER JOINOUTER JOIN rất quan trọng để viết truy vấn hiệu quả. Học các kỹ thuật này cũng giúp cải thiện tối ưu hoá truy vấn để truy xuất dữ liệu nhanh hơn. Tôi khuyến khích bạn tiếp tục luyện tập để trau dồi thêm kỹ năng quản trị cơ sở dữ liệu.

Tôi đề xuất bạn thử lộ trình nghề nghiệp Associate Data Analyst in SQL của chúng tôi để trở thành một nhà phân tích dữ liệu giỏi. Khóa học Reporting in SQL cũng sẽ giúp bạn thành thạo xây dựng báo cáo và bảng điều khiển phức tạp để trình bày dữ liệu hiệu quả. Nếu bạn đang chuẩn bị phỏng vấn có yêu cầu trình diễn kỹ năng SQL, hãy xem bài blog 20 Top SQL Joins Interview Questions để hỗ trợ việc chuẩn bị.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

SQL INNER JOIN và OUTER JOIN: Câu hỏi thường gặp

Sự khác nhau giữa INNER JOIN và OUTER JOIN trong SQL là gì?

INNER JOIN chỉ trả về các hàng khớp từ cả hai bảng, trong khi OUTER JOIN bao gồm cả các hàng không khớp, với NULL lấp đầy khoảng trống khi không tìm thấy dữ liệu tương ứng.

Khi nào tôi nên dùng INNER JOIN trong SQL?

Hãy dùng INNER JOIN khi bạn cần truy xuất chỉ các hàng có giá trị khớp ở cả hai bảng.

Các loại OUTER JOIN trong SQL là gì?

Các loại OUTER JOIN gồm có LEFT OUTER JOIN, RIGHT OUTER JOIN và FULL OUTER JOIN.

LEFT OUTER JOIN hoạt động như thế nào trong SQL?

Left outer join trả về tất cả hàng từ bảng bên trái, các hàng khớp từ bảng bên phải, và cả các hàng không khớp từ bảng bên trái.

FULL OUTER JOIN trong SQL là gì?

FULL OUTER JOIN trả về tất cả hàng từ cả hai bảng, bao gồm các hàng không khớp từ mỗi bảng.

Chủ đề

Học SQL với DataCamp

Courses

Xử lý dữ liệu trong SQL

4 giờ
323.5K
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow