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

SQL LEFT JOIN so với LEFT OUTER JOIN: Những điều bạn cần biết

LEFT JOIN và LEFT OUTER JOIN trong SQL là giống hệt nhau, không có khác biệt về chức năng. Tiếp tục đọc để khám phá các ví dụ thực tiễn và cách áp dụng các phép nối này hiệu quả trong truy vấn của bạn.
· 4 phút đọc

Khám phá cùng AI

Hiểu những sắc thái của các phép nối (join) trong SQL là điều bắt buộc với bất kỳ ai làm việc với cơ sở dữ liệu quan hệ. Trong hướng dẫn này, chúng ta sẽ xem xét kỹ LEFT JOIN và LEFT OUTER JOIN trong SQL.

Nếu bạn muốn thành thạo SQL và nâng tầm khả năng truy vấn, hãy đăng ký một khóa học như Joining Data in SQL để thực sự hiểu những khác biệt tinh tế nhưng quan trọng giữa các phép nối một bảng và hai bảng. 

LEFT JOIN so với LEFT OUTER JOIN

Không có sự khác biệt giữa LEFT JOIN và LEFT OUTER JOIN. Chúng có thể hoán đổi cho nhau trong SQL. Cả hai đều thực hiện chính xác cùng một việc: lấy tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải.

Hãy xem một ví dụ thực tế để tự mình thấy rằng LEFT JOIN và LEFT OUTER JOIN là như nhau. Để làm điều này, chúng ta sẽ tạo và sử dụng hai bảng mẫu: Employees và Departments.

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName VARCHAR(50)
);
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES
(1, 'HR'),
(2, 'IT'),
(3, 'Finance'),
(4, 'Marketing');
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    EmployeeName VARCHAR(50),
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
INSERT INTO Employees (EmployeeID, EmployeeName, DepartmentID) VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', NULL),
(4, 'David', 3);

LEFT JOIN

Bây giờ chúng ta đã có hai bảng sẵn sàng, hãy thử một truy vấn với LEFT JOIN.

SELECT Employees.EmployeeID, Employees.EmployeeName, 
Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

Output from the <code624

Kết quả từ hàm LEFT JOIN. Ảnh: Tác giả 

Truy vấn với LEFT JOIN trả về tất cả các hàng từ bảng bên trái, Employees, và các hàng khớp từ bảng bên phải, Departments. Nếu không có khớp, các cột từ bảng Departments (bảng bên phải) sẽ nhận giá trị NULL hoặc trống.

LEFT OUTER JOIN

Giờ hãy thử với LEFT OUTER JOIN:

SELECT Employees.EmployeeID, Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

Output from the <code589

Kết quả từ hàm LEFT OUTER JOIN. Ảnh: Tác giả

Bạn có thể thấy rằng cả hai truy vấn đều cho ra cùng một kết quả. 

Tình huống sử dụng cho LEFT JOIN hoặc LEFT OUTER JOIN

LEFT JOIN / LEFT OUTER JOIN cực kỳ hữu ích trong nhiều tình huống. Dưới đây là một số ví dụ.

  • Xác định bản ghi không khớp: Bạn có thể dùng LEFT JOIN hoặc LEFT OUTER JOIN để tìm các bản ghi trong một bảng không có bản ghi khớp ở bảng khác. Trong truy vấn trên, bạn có thể thấy bạn của chúng ta, Charlie, chưa được gán vào phòng ban nào.

  • Kiểm tra tính toàn vẹn dữ liệu: Bạn có thể dùng LEFT JOIN hoặc LEFT OUTER JOIN để đảm bảo tính nhất quán dữ liệu giữa các bảng bằng cách kiểm tra các bản ghi thiếu hoặc không khớp. Ví dụ, chúng ta có thể dùng mệnh đề WHERE để lọc kết quả chỉ gồm các hàng mà bản ghi Departments.DepartmentID là NULL hoặc thiếu.

  • Kết hợp dữ liệu liên quan: Dùng LEFT JOIN hoặc LEFT OUTER JOIN để kết hợp dữ liệu từ các bảng liên quan vào một báo cáo tổng hợp. Cách tiếp cận này gom thông tin từ nhiều nguồn, cung cấp cái nhìn đầy đủ về dữ liệu của bạn.

Lưu ý về hiệu năng và kỹ thuật nâng cao

Mặc dù LEFT JOIN và LEFT OUTER JOIN khá đơn giản, có một số lưu ý về hiệu năng và kỹ thuật nâng cao cần ghi nhớ.

Ảnh hưởng đến hiệu năng truy vấn

LEFT JOIN/ LEFT OUTER JOIN có thể ảnh hưởng đến hiệu năng khi làm việc với tập dữ liệu lớn. Khi số lượng hàng trong các bảng tăng, thời gian xử lý phép nối và truy xuất kết quả cũng tăng. Vì vậy, điều quan trọng là cân nhắc kích thước các bảng liên quan và tối ưu truy vấn để đạt hiệu quả.

Chiến lược lập chỉ mục để cải thiện hiệu năng

Sử dụng chỉ mục trên các cột tham gia vào điều kiện nối có thể cải thiện đáng kể thời gian xử lý. Chỉ mục giúp cơ sở dữ liệu nhanh chóng tìm và khớp các hàng giữa các bảng. Ví dụ, nếu bạn thường xuyên nối bảng theo DepartmentID, tạo chỉ mục trên cột DepartmentID ở cả hai bảng sẽ tăng tốc quá trình, giúp truy vấn hiệu quả và phản hồi tốt hơn.

So sánh với các loại join khác

Hiểu khi nào dùng các loại join khác nhau (INNER JOIN, RIGHT JOIN, FULL OUTER JOIN) là quan trọng để tối ưu truy vấn. LEFT JOIN hoặc LEFT OUTER JOIN đặc biệt hữu ích khi bạn cần tất cả bản ghi từ bảng bên trái. Nếu bạn không cần tất cả bản ghi từ bảng bên trái, hãy cân nhắc loại khác.

Kết hợp với truy vấn con

Truy vấn con (subquery), còn gọi là truy vấn bên trong hoặc truy vấn lồng, hữu ích trong các kịch bản truy xuất dữ liệu phức tạp. Khi dùng cùng LEFT JOIN hoặc LEFT OUTER JOIN, truy vấn con có thể giúp bạn lọc và tổng hợp dữ liệu, nối bảng có điều kiện, và chia nhỏ các truy vấn phức tạp thành các phần dễ quản lý hơn.

Tổng kết

Việc hiểu rõ các hàm LEFT JOIN và LEFT OUTER JOIN trong SQL là rất quan trọng cho quản lý dữ liệu, lập báo cáo và phân tích hiệu quả. Dù chức năng giống hệt nhau, việc nắm vững tình huống sử dụng, tác động đến hiệu năng và các kỹ thuật nâng cao sẽ giúp bạn vận dụng hai hàm này tốt hơn. Để học thêm, hãy tham khảo các nguồn sau:

  • Introduction to SQL: Tìm hiểu cách tạo và truy vấn cơ sở dữ liệu quan hệ bằng SQL.
  • SQL Fundamentals: Nắm vững các kỹ năng SQL nền tảng để tương tác và truy vấn dữ liệu của bạn. 
  • Learn SQL: Trang bị kiến thức về ngôn ngữ lập trình đang được ưa chuộng cho phép bạn quản lý dữ liệu trong cơ sở dữ liệu quan hệ.
  • Reporting in  SQL: Với khóa học thực hành này, bạn sẽ học cách xây dựng báo cáo và bảng điều khiển SQL của riêng mình, đồng thời trau dồi kỹ năng khám phá, làm sạch và kiểm định dữ liệu.
Vikash Singh

Tác giả

Vikash Singh

Chuyên gia dày dạn kinh nghiệm trong khoa học dữ liệu, trí tuệ nhân tạo, phân tích và chiến lược dữ liệu.

Câu hỏi thường gặp về SQL

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

Không có khác biệt; LEFT JOIN và LEFT OUTER JOIN thực hiện cùng một chức năng và có thể dùng thay thế cho nhau.

Khi nào tôi nên dùng LEFT JOIN?

Dùng LEFT JOIN khi bạn cần 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. Các bản ghi không khớp từ bảng bên phải sẽ có giá trị NULL.

LEFT JOIN có trả về nhiều hàng hơn bảng bên trái không?

Không, LEFT JOIN trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nó không làm tăng số hàng của bảng bên trái.

Xử lý giá trị NULL trong kết quả LEFT JOIN như thế nào?

Bạn có thể dùng hàm COALESCE để thay thế giá trị thiếu bằng một giá trị mặc định trong tập kết quả.

Những tình huống sử dụng phổ biến của LEFT JOIN là gì?

Các tình huống phổ biến gồm xác định bản ghi không khớp, kiểm tra tính toàn vẹn dữ liệu và kết hợp tập dữ liệu trong quy trình ETL.

Chủ đề

Liên quan