SQL - Right Join: Hướng dẫn chi tiết cho người mới bắt đầu
Chào mừng các bạn, những pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ khám phá thế giới kỳ diệu của SQL Right Joins. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn trong hành trình này. Cuối cùng, bạn sẽ biết cách thực hiện right join các bảng như một chuyên gia!
Right Join trong SQL: Người bạn mới của bạn
Right Join là gì?
Hãy bắt đầu từ cơ bản. Right Join giống như mời tất cả bạn bè từ một nhóm (gọi là bảng bên phải) đến một bữa tiệc, và sau đó kiểm tra xem họ có bạn chung với nhóm khác (bảng bên trái) không. Nếu có, tuyệt vời! Nếu không, đừng lo lắng - họ vẫn được đến tiệc.
Trong thuật ngữ SQL, một Right Join trả về tất cả các bản ghi từ bảng bên phải (table2) và các bản ghi khớp từ bảng bên trái (table1). Nếu không có khớp, kết quả sẽ là NULL ở bên trái.
Cú pháp cơ bản
Dưới đây là cách một Right Join cơ bản trông như thế nào:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Hãy phân tích nó:
- Chúng ta đang chọn các cột chúng ta muốn xem
- Chúng ta bắt đầu với
table1
(bảng bên trái của chúng ta) - Chúng ta RIGHT JOIN nó với
table2
(bảng bên phải của chúng ta) - Chúng ta chỉ định cách chúng được kết nối bằng từ khóa ON
Một ví dụ đơn giản
Hãy tưởng tượng chúng ta có hai bảng: Employees
và Departments
. Không phải tất cả các phòng ban đều có nhân viên, nhưng chúng ta muốn xem tất cả các phòng ban, ngay cả những phòng ban trống.
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
Truy vấn này sẽ hiển thị tất cả các phòng ban, ngay cả khi chúng không có nhân viên. Đối với các phòng ban không có nhân viên, cột Name sẽ hiển thị NULL.
Kết hợp nhiều bảng với Right Join: Càng nhiều càng vui!
Đôi khi, hai bảng không đủ. Giả sử chúng ta muốn thêm thông tin lương từ bảng Salaries
.
SELECT e.Name, d.DepartmentName, s.Salary
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
RIGHT JOIN Salaries s ON e.EmployeeID = s.EmployeeID;
Ở đây, chúng ta sử dụng别名 bảng (e, d, s) để làm cho truy vấn của chúng ta dễ đọc hơn. Truy vấn này sẽ hiển thị tất cả các phòng ban và tất cả các mức lương, ngay cả khi không có nhân viên khớp.
Lời khuyên chuyên nghiệp: Thứ tự quan trọng
Khi kết hợp nhiều bảng với Right Join, thứ tự của các kết hợp có thể ảnh hưởng đến kết quả của bạn. Luôn bắt đầu với bảng bạn muốn đảm bảo được đại diện đầy đủ (trong trường hợp này, Departments).
Right Join với WHERE Clause: Lựa chọn kỹ lưỡng
Đôi khi, chúng ta muốn chọn lọc dữ liệu của mình một cách kỹ lưỡng hơn. Đó là khi FROM khóa WHERE trở nên hữu ích.
SELECT e.Name, d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE d.Location = 'New York';
Truy vấn này sẽ hiển thị tất cả các phòng ban ở New York, cùng với bất kỳ nhân viên nào trong các phòng ban đó.
Tìm kiếm các phòng ban cô đơn
Muốn tìm các phòng ban không có nhân viên? Dưới đây là cách:
SELECT d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE e.EmployeeID IS NULL;
Truy vấn này sử dụng RIGHT JOIN để bao gồm tất cả các phòng ban, sau đó lọc các phòng ban không có nhân viên nào được tìm thấy.
Kết hợp tất cả lại: Một tình huống thực tế
Hãy tưởng tượng chúng ta đang quản lý cơ sở dữ liệu của một trường học. Chúng ta có bảng Students
, Classes
, và Enrollments
. Chúng ta muốn xem tất cả các lớp học, số lượng học sinh đã đăng ký và điểm trung bình.
SELECT
c.ClassName,
COUNT(s.StudentID) AS EnrolledStudents,
AVG(e.Grade) AS AverageGrade
FROM Classes c
LEFT JOIN Enrollments e ON c.ClassID = e.ClassID
LEFT JOIN Students s ON e.StudentID = s.StudentID
GROUP BY c.ClassName;
Truy vấn này sẽ hiển thị tất cả các lớp học, ngay cả những lớp không có học sinh đăng ký. Các hàm COUNT và AVG sẽ xử lý các giá trị NULL một cách phù hợp.
Các phương pháp Right Join phổ biến
Dưới đây là bảng các phương pháp Right Join phổ biến mà bạn có thể tìm thấy hữu ích:
Phương pháp | Mô tả | Ví dụ |
---|---|---|
Right Join cơ bản | Kết hợp hai bảng, giữ lại tất cả các bản ghi từ bảng bên phải | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id |
Right Join với WHERE | Lọc kết quả của Right Join | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id WHERE table2.column = 'value' |
Nhiều Right Joins | Kết hợp hơn hai bảng | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id RIGHT JOIN table3 ON table2.id = table3.id |
Right Join với USING | Đơn giản hóa điều kiện kết hợp khi tên cột trùng nhau | SELECT * FROM table1 RIGHT JOIN table2 USING (id) |
Right Join với GROUP BY | Nhóm kết quả của Right Join | SELECT table2.column, COUNT(*) FROM table1 RIGHT JOIN table2 ON table1.id = table2.id GROUP BY table2.column |
Nhớ rằng, thực hành là cách tốt nhất để trở nên hoàn hảo! Đừng ngần ngại thử nghiệm các truy vấn này trên cơ sở dữ liệu của riêng bạn. Chúc mừng và may mắn trong việc code, và mong rằng JOIN sẽ luôn ở bên bạn!
Credits: Image by storyset