MySQL - Right Join: Hướng dẫn chi tiết cho người mới bắt đầu
Xin chào các bạn yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng nhau lặn vào thế giới kỳ diệu của MySQL và khám phá một công cụ mạnh mẽ trong bộ công cụ SQL của chúng ta: Right Join. Đừng lo lắng nếu bạn mới bắt đầu lập trình - tôi sẽ hướng dẫn bạn từng bước, như tôi đã làm cho hàng trăm sinh viên trong những năm dạy học của mình. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và cùng nhau bắt đầu hành trình thú vị này nhé!
Right Join là gì?
Trước khi chúng ta đi vào chi tiết, hãy bắt đầu từ cơ bản. Hãy tưởng tượng bạn đang lên kế hoạch cho một buổi tiệc và bạn có hai danh sách: một danh sách tên bạn bè và một danh sách đồ uống yêu thích của họ. Right Join giống như việc kết hợp hai danh sách này, nhưng tập trung vào việc đảm bảo rằng tất cả các đồ uống yêu thích đều được bao gồm, ngay cả khi bạn không có bạn bè nào liên quan. Đ有趣 phải không?
Trong MySQL, Right Join kết hợp hai bảng dựa trên một cột liên quan giữa chúng, giữ lại tất cả các bản ghi từ bảng bên phải (bảng thứ hai được đề cập trong truy vấn) và các bản ghi khớp từ bảng bên trái (bảng đầu tiên được đề cập).
Cú pháp của Right Join
Dưới đây là cú pháp cơ bản của Right Join:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Đừng lo lắng nếu điều này trông có vẻ rắc rối. Chúng ta sẽ phân tích nó bằng một số ví dụ thực tế ngay sau!
Right Join trong hành động
Hãy tạo hai bảng đơn giản để minh họa cách Right Join hoạt động. Chúng ta sẽ sử dụng một kịch bản của một nhà sách nhỏ.
CREATE TABLE authors (
author_id INT PRIMARY KEY,
author_name VARCHAR(50)
);
CREATE TABLE books (
book_id INT PRIMARY KEY,
title VARCHAR(100),
author_id INT
);
INSERT INTO authors VALUES (1, 'J.K. Rowling'), (2, 'George Orwell'), (3, 'Jane Austen');
INSERT INTO books VALUES (1, 'Harry Potter', 1), (2, '1984', 2), (3, 'Animal Farm', 2), (4, 'The Silkworm', 1), (5, 'Unpublished Mystery', NULL);
Bây giờ, hãy sử dụng Right Join để xem tất cả các sách, bao gồm cả những sách không có tác giả:
SELECT books.title, authors.author_name
FROM authors
RIGHT JOIN books ON authors.author_id = books.author_id;
Truy vấn này sẽ tạo ra kết quả như sau:
title | author_name |
---|---|
Harry Potter | J.K. Rowling |
1984 | George Orwell |
Animal Farm | George Orwell |
The Silkworm | J.K. Rowling |
Unpublished Mystery | NULL |
Như bạn có thể thấy, tất cả các sách đều được liệt kê, ngay cả 'Unpublished Mystery' không có tác giả được chỉ định. Đây là phép màu của Right Join - nó đảm bảo rằng tất cả các bản ghi từ bảng bên phải (sách trong trường hợp này) đều được bao gồm.
Kết hợp nhiều bảng với Right Join
Bây giờ, hãy làm cho mọi thứ thú vị hơn một chút. Giả sử chúng ta có một bảng khác cho thể loại sách:
CREATE TABLE categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(50)
);
INSERT INTO categories VALUES (1, 'Fantasy'), (2, 'Dystopian'), (3, 'Classic');
ALTER TABLE books ADD COLUMN category_id INT;
UPDATE books SET category_id = 1 WHERE book_id IN (1, 4);
UPDATE books SET category_id = 2 WHERE book_id IN (2, 3);
Chúng ta có thể sử dụng nhiều Right Join để kết hợp tất cả ba bảng:
SELECT b.title, a.author_name, c.category_name
FROM authors a
RIGHT JOIN books b ON a.author_id = b.author_id
RIGHT JOIN categories c ON b.category_id = c.category_id;
Truy vấn này sẽ cho chúng ta:
title | author_name | category_name |
---|---|---|
Harry Potter | J.K. Rowling | Fantasy |
1984 | George Orwell | Dystopian |
Animal Farm | George Orwell | Dystopian |
The Silkworm | J.K. Rowling | Fantasy |
Unpublished Mystery | NULL | NULL |
NULL | NULL | Classic |
Chú ý rằng chúng ta có tất cả các thể loại, ngay cả 'Classic' không có sách, và tất cả các sách, ngay cả những sách không có thể loại hoặc tác giả.
Right Join với WHERE Clause
Đôi khi, chúng ta muốn lọc kết quả của mình thêm. Chúng ta có thể làm điều này bằng cách thêm một WHERE clause:
SELECT b.title, a.author_name
FROM authors a
RIGHT JOIN books b ON a.author_id = b.author_id
WHERE a.author_name IS NOT NULL;
Truy vấn này sẽ loại trừ các sách không có tác giả:
title | author_name |
---|---|
Harry Potter | J.K. Rowling |
1984 | George Orwell |
Animal Farm | George Orwell |
The Silkworm | J.K. Rowling |
Right Join sử dụng chương trình client
Trong khi chúng ta đã xem các truy vấn SQL trực tiếp, trong các kịch bản thực tế, bạn thường sẽ sử dụng một chương trình client để tương tác với MySQL. Dưới đây là một đoạn mã Python đơn giản minh họa cách thực hiện Right Join sử dụng thư viện MySQL Connector:
import mysql.connector
# Kết nối đến cơ sở dữ liệu
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1',
database='your_database')
cursor = cnx.cursor()
# Thực hiện truy vấn Right Join
query = """
SELECT b.title, a.author_name
FROM authors a
RIGHT JOIN books b ON a.author_id = b.author_id
"""
cursor.execute(query)
# Lấy và in kết quả
for (title, author_name) in cursor:
print(f"Book: {title}, Author: {author_name}")
# Đóng kết nối
cursor.close()
cnx.close()
Đoạn mã này kết nối đến cơ sở dữ liệu của bạn, thực hiện truy vấn Right Join, và in kết quả.
Kết luận
Và đây bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của Right Joins, từ các truy vấn đơn giản đến các kịch bản phức tạp hơn. Nhớ rằng Right Joins đặc biệt hữu ích khi bạn muốn đảm bảo rằng tất cả các bản ghi từ bảng bên phải được bao gồm trong kết quả, bất kể chúng có khớp với bảng bên trái hay không.
Như với bất kỳ công cụ nào trong lập trình, thực hành là chìa khóa của sự hoàn hảo. Tôi khuyến khích bạn thử nghiệm với các truy vấn này, sửa đổi chúng, và xem kết quả thay đổi như thế nào. Đừng sợ phạm lỗi - đó thường là nơi mà sự học tập tốt nhất diễn ra!
Trong những năm dạy học của mình, tôi đã thấy rằng sinh viên nào chơi với mã và thử để打破 (trong một môi trường an toàn và kiểm soát, tất nhiên) thường có được sự hiểu biết sâu sắc nhất. Vậy hãy tiến lên, kết hợp các bảng của bạn, và chúc may mắn với các truy vấn của bạn!
Credits: Image by storyset