MySQL - Inner Join: Hướng dẫn cơ bản

Xin chào các bạn đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng lặn vào thế giới kỳ diệu của MySQL và khám phá một trong những tính năng mạnh mẽ nhất của nó: Inner Join. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình - 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, giải thích mọi thứ từng bước. Vậy, hãy cầm một tách cà phê, và chúng ta cùng bắt đầu nhé!

MySQL - Inner Join

Inner Join là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu Inner Join là gì và tại sao nó lại quan trọng trong quản lý cơ sở dữ liệu.

Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa tiệc lớn 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ọ. Liệu có tốt không nếu bạn có thể kết hợp hai danh sách này để xem bạn bè nào thích đồ uống nào? Đó chính là điều mà Inner Join làm trong MySQL - nó 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 giữa chúng.

Cú pháp cơ bản

Dưới đây là cú pháp cơ bản của Inner Join:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

Đừng lo lắng nếu điều này trông có vẻ đáng sợ - chúng ta sẽ phân tích nó bằng một số ví dụ thực tế ngay sau!

Inner Join trong thực tế

Hãy tạo hai bảng đơn giản để minh họa cách Inner Join hoạt động:

CREATE TABLE friends (
id INT PRIMARY KEY,
name VARCHAR(50)
);

CREATE TABLE drinks (
id INT PRIMARY KEY,
friend_id INT,
drink VARCHAR(50)
);

INSERT INTO friends (id, name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');

INSERT INTO drinks (id, friend_id, drink) VALUES
(1, 1, 'Nước chanh'),
(2, 2, 'Cola'),
(3, 3, 'Trà đá'),
(4, 1, 'Nước');

Bây giờ, hãy sử dụng Inner Join để kết hợp hai bảng này:

SELECT friends.name, drinks.drink
FROM friends
INNER JOIN drinks
ON friends.id = drinks.friend_id;

Truy vấn này sẽ cho chúng ta:

name drink
Alice Nước chanh
Alice Nước
Bob Cola
Charlie Trà đá

Thật tuyệt vời phải không? Chúng ta đã thành công trong việc kết hợp mỗi bạn bè với đồ uống yêu thích của họ!

Hiểu kết quả

  • Alice xuất hiện hai lần vì cô ấy có hai đồ uống liên kết với cô ấy.
  • Thứ tự dựa trên id trong bảng friends.
  • Inner Join chỉ hiển thị các bản ghi có sự khớp trong cả hai bảng.

Kết hợp nhiều bảng bằng Inner Join

Bây giờ, hãy tăng thêm một chút thử thách. Giả sử chúng ta muốn thêm một chiều mới cho kế hoạch tiệc của mình? Hãy nói chúng ta cũng muốn biết bạn bè của chúng ta thích snack nào.

Trước hết, hãy tạo một bảng mới:

CREATE TABLE snacks (
id INT PRIMARY KEY,
friend_id INT,
snack VARCHAR(50)
);

INSERT INTO snacks (id, friend_id, snack) VALUES
(1, 1, 'Bánh quy'),
(2, 2, 'Popcorn'),
(3, 3, 'Khoai tây chiên');

Bây giờ, chúng ta có thể kết hợp tất cả ba bảng:

SELECT friends.name, drinks.drink, snacks.snack
FROM friends
INNER JOIN drinks ON friends.id = drinks.friend_id
INNER JOIN snacks ON friends.id = snacks.friend_id;

Điều này sẽ cho chúng ta:

name drink snack
Alice Nước chanh Bánh quy
Alice Nước Bánh quy
Bob Cola Popcorn
Charlie Trà đá Khoai tây chiên

Nhìn xem! Bây giờ chúng ta có một thực đơn tiệc hoàn chỉnh cho mỗi bạn bè.

Inner Join với WHERE Clause

Đôi khi, chúng ta có thể muốn lọc kết quả kết hợp của mình. Đây là lúc WHERE clause rất hữu ích. Giả sử chúng ta chỉ muốn xem sở thích của bạn bè có tên bắt đầu bằng 'A':

SELECT friends.name, drinks.drink, snacks.snack
FROM friends
INNER JOIN drinks ON friends.id = drinks.friend_id
INNER JOIN snacks ON friends.id = snacks.friend_id
WHERE friends.name LIKE 'A%';

Điều này sẽ cho chúng ta:

name drink snack
Alice Nước chanh Bánh quy
Alice Nước Bánh quy

Inner Join bằng cách sử dụng một chương trình khách

Trong khi chúng ta đã xem các truy vấn SQL trực tiếp, trong các tình huống thực tế, bạn sẽ thường sử dụng một chương trình khách để tương tác với cơ sở dữ liệu MySQL của mình. Hãy xem chúng ta có thể làm gì bằng cách sử dụng Python và 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_name')

cursor = cnx.cursor()

# Thực thi truy vấn Inner Join
query = """
SELECT friends.name, drinks.drink, snacks.snack
FROM friends
INNER JOIN drinks ON friends.id = drinks.friend_id
INNER JOIN snacks ON friends.id = snacks.friend_id
"""

cursor.execute(query)

# Lấy và in kết quả
for (name, drink, snack) in cursor:
print(f"{name} thích {drink} và {snack}")

# Đóng kết nối
cursor.close()
cnx.close()

Chương trình này sẽ kết nối đến cơ sở dữ liệu MySQL của bạn, thực thi truy vấn Inner Join, và in ra sở thích của mỗi bạn bè dưới dạng dễ đọc.

Kết luận

Và thế là chúng ta đã cùng nhau hành trình qua thế giới MySQL Inner Joins, từ khái niệm cơ bản đến các truy vấn phức tạp hơn và thậm chí là một cái nhìn về cách sử dụng chúng trong môi trường lập trình thực tế. Nhớ rằng, thực hành là cách tốt nhất để trở nên thành thạo, vì vậy đừng ngại thử nghiệm với các bảng và truy vấn của riêng bạn.

Inner Joins giống như những con ong trong thế giới cơ sở dữ liệu - chúng liên kết mọi thứ lại với nhau. Càng sử dụng chúng nhiều, bạn sẽ càng đánh giá cao sức mạnh của chúng trong việc kết nối dữ liệu của bạn theo những cách có ý nghĩa.

Chúc các bạn thành công trong việc truy vấn, và hy vọng rằng các join của bạn luôn thú vị! (Xin lỗi, tôi không thể résist một chút hài hước về cơ sở dữ liệu ở đây!)

Credits: Image by storyset