SQL - Left Join: Hướng dẫn chi tiết cho người mới bắt đầu
Xin chào các bạn đam mê SQL! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của SQL Left Joins. Đừng lo lắng nếu bạn mới làm quen với lập trình; tôi sẽ là người bạn thân thiện của bạn, giải thích mọi thứ từng bước. Vậy, hãy cầm một tách cà phê và cùng nhau bắt đầu nhé!
outer join là gì?
Trước khi chúng ta深入研究 Left Joins, hãy cùng hiểu rõ Outer Join là gì. Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa tiệc và có hai danh sách: một danh sách với tên bạn bè và danh sách khác với đồ uống yêu thích của họ. Outer Join giống như việc kết hợp hai danh sách này, ngay cả khi một số bạn bè chưa chỉ định đồ uống yêu thích của họ hoặc một số đồ uống không được chỉ định cho bất kỳ bạn bè nào.
Trong thuật ngữ SQL, Outer Join cho phép chúng ta kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một cột liên quan, ngay cả khi không có sự khớp trong một trong các bảng. Có ba loại Outer Joins:
Loại Join | Mô tả |
---|---|
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 |
Right Join | Trả về tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái |
Full Outer Join | Trả về tất cả các hàng khi có sự khớp trong bảng bên trái hoặc bảng bên phải |
Trong hướng dẫn này, chúng ta sẽ tập trung vào Left Join, đây là loại Outer Join được sử dụng phổ biến nhất.
SQL Left Join
A Left Join trả về tất cả các bản ghi từ bảng bên trái (bảng đầu tiên được đề cập trong truy vấn) và các bản ghi khớp từ bảng bên phải. Nếu không có sự khớp, kết quả sẽ là NULL ở bên phải.
Hãy xem một ví dụ. Giả sử chúng ta có hai bảng: Students
và Courses
.
-- Bảng Students
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50)
);
INSERT INTO Students VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
-- Bảng Courses
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(50),
StudentID INT
);
INSERT INTO Courses VALUES
(101, 'SQL Basics', 1),
(102, 'Advanced SQL', 2),
(103, 'Data Analysis', NULL);
Bây giờ, hãy sử dụng Left Join để xem tất cả học sinh và các khóa học của họ (nếu có):
SELECT Students.Name, Courses.CourseName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID;
Kết quả sẽ trông như thế này:
Name | CourseName |
---|---|
Alice | SQL Basics |
Bob | Advanced SQL |
Charlie | NULL |
Như bạn có thể thấy, Charlie xuất hiện trong kết quả mặc dù anh ấy không tham gia bất kỳ khóa học nào. Đây chính là phép màu của Left Join!
Kết hợp nhiều bảng với Left Join
Bây giờ chúng ta đã thành thạo các kiến thức cơ bản, hãy nâng cao cấp độ. Trong các tình huống thực tế, bạn sẽ thường cần kết hợp nhiều hơn hai bảng. Đừng lo lắng; Left Join sẽ hỗ trợ bạn!
Hãy thêm một bảng thứ ba vào ví dụ của chúng ta: Instructors
.
CREATE TABLE Instructors (
InstructorID INT PRIMARY KEY,
InstructorName VARCHAR(50),
CourseID INT
);
INSERT INTO Instructors VALUES
(201, 'Prof. Smith', 101),
(202, 'Dr. Johnson', 102),
(203, 'Ms. Williams', NULL);
Bây giờ, hãy kết hợp tất cả ba bảng để có cái nhìn toàn diện về học sinh, khóa học và giảng viên:
SELECT Students.Name AS StudentName,
Courses.CourseName,
Instructors.InstructorName
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
LEFT JOIN Instructors ON Courses.CourseID = Instructors.CourseID;
Truy vấn này trước tiên kết hợp Students
với Courses
, sau đó kết hợp kết quả với Instructors
. Kết quả có thể trông như thế này:
StudentName | CourseName | InstructorName |
---|---|---|
Alice | SQL Basics | Prof. Smith |
Bob | Advanced SQL | Dr. Johnson |
Charlie | NULL | NULL |
Thật tuyệt vời phải không? Chúng ta có thể dễ dàng kết hợp thông tin từ nhiều bảng với nhau!
Left Join với WHERE Clause
Đôi khi, bạn có thể muốn lọc kết quả của Left Join. Đây là lúc WHERE clause phát huy tác dụng. Giả sử chúng ta muốn tìm tất cả học sinh không tham gia bất kỳ khóa học nào:
SELECT Students.Name
FROM Students
LEFT JOIN Courses ON Students.StudentID = Courses.StudentID
WHERE Courses.CourseID IS NULL;
Truy vấn này sẽ trả về:
Name |
---|
Charlie |
WHERE clause lọc bỏ tất cả các hàng mà Courses.CourseID
không phải NULL, hiệu quả là chỉ trả về học sinh không tham gia khóa học nào.
Lưu ý, WHERE clause được áp dụng sau khi thực hiện join. Nếu bạn muốn lọc bảng bên phải trước khi join, bạn nên sử dụng ON clause thay vì.
Kết luận
Và thế là chúng ta đã cùng nhau hành trình qua thế giới của SQL Left Joins, từ các khái niệm cơ bản đến các ứng dụng nâng cao. Left Joins là công cụ vô cùng mạnh mẽ trong bộ công cụ SQL của bạn, cho phép bạn kết hợp dữ liệu từ nhiều bảng ngay cả khi không có sự khớp hoàn hảo.
Khi bạn gyak và có thêm kinh nghiệm, bạn sẽ thấy Left Joins trở nên tự nhiên. Chúng giống như瑞士军刀 của SQL - linh hoạt, hữu ích và luôn có mặt khi bạn cần.
Nhớ rằng, chìa khóa để thành thạo SQL là gyak. Vậy, đừng ngần ngại thử nghiệm với các truy vấn khác nhau và cấu trúc bảng. Chúc các bạn may mắn và các join của bạn luôn thành công!
Credits: Image by storyset