MySQL - Left Join: Hướng dẫn cho người mới bắt đầu

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

MySQL - Left Join

Left Join là gì?

Trước khi chúng ta nhảy vào chi tiết của Left Joins, hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa 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ọ. Left Join giống như việc kết hợp hai danh sách này, đảm bảo rằng mọi người trong danh sách bạn bè của bạn đều được bao gồm, ngay cả khi bạn không biết đồ uống yêu thích của họ.

Trong MySQL, một Left 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 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ó khớp trong bảng bên phải, kết quả sẽ chứa các giá trị NULL cho những cột đó.

Bây giờ, hãy xem điều này hoạt động trong thực tế!

Cú pháp cơ bản của Left Join

Dưới đây là cú pháp tổng quát cho một Left Join trong MySQL:

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;

Đừ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ó với một số ví dụ.

Left Join trong hành động

Hãy tạo hai bảng đơn giản để làm việc: employeesdepartments.

CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50),
dept_id INT
);

CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(50)
);

INSERT INTO employees VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', NULL),
(4, 'David', 3);

INSERT INTO departments VALUES
(1, 'HR'),
(2, 'IT'),
(4, 'Finance');

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

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.dept_id;

Truy vấn này sẽ tạo ra kết quả như sau:

emp_id emp_name dept_name
1 Alice HR
2 Bob IT
3 Charlie NULL
4 David NULL

Hãy phân tích những gì đang xảy ra ở đây:

  1. Alice và Bob được khớp với các phòng ban tương ứng của họ.
  2. Charlie không có phòng ban (NULL trong bảng employees), vì vậy dept_name là NULL.
  3. David có dept_id là 3, nhưng không tồn tại trong bảng departments, vì vậy dept_name của anh ấy cũng là NULL.
  4. Tất cả các nhân viên đều được bao gồm, ngay cả những người không có phòng ban khớp.

Kết hợp nhiều bảng với Left Join

Trong các tình huống thực tế, bạn thường cần kết hợp hơn hai bảng. Hãy thêm bảng projects vào ví dụ của chúng ta:

CREATE TABLE projects (
project_id INT PRIMARY KEY,
project_name VARCHAR(50),
dept_id INT
);

INSERT INTO projects VALUES
(1, 'Website Redesign', 2),
(2, 'Employee Survey', 1),
(3, 'Cost Cutting', 4);

Bây giờ, hãy kết hợp tất cả ba bảng:

SELECT e.emp_name, d.dept_name, p.project_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
LEFT JOIN projects p ON d.dept_id = p.dept_id;

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

emp_name dept_name project_name
Alice HR Employee Survey
Bob IT Website Redesign
Charlie NULL NULL
David NULL NULL

Chú ý cách chúng ta đang xây dựng trên truy vấn trước đó, thêm một lớp thông tin khác. Điều này giống như thêm một danh sách thứ ba vào kế hoạch tiệc của chúng ta - bây giờ chúng ta biết không chỉ bạn bè và đồ uống yêu thích của họ, mà còn trò chơi họ thích chơi!

Left Join với WHERE Clause

Đôi khi, bạn muốn lọc kết quả của mình thêm. Câu lệnh WHERE rất hữu ích ở đây. Giả sử chúng ta muốn tìm tất cả các nhân viên không có phòng ban được chỉ định:

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
WHERE d.dept_id IS NULL;

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

emp_id emp_name dept_name
3 Charlie NULL
4 David NULL

Truy vấn này giống như hỏi, "Ai trong danh sách bạn bè của tôi không có đồ uống yêu thích được ghi chú?"

Left Join trong chương trình khách

Trong khi chúng ta đã xem xét các truy vấn SQL thô, trong thực tế, bạn thường sẽ sử dụng một chương trình khách để tương tác với MySQL. Hãy xem bạn có thể sử dụng Left Join trong một script Python sử dụng thư viện mysql-connector:

import mysql.connector

# Thiết lập kết nối
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdbname"
)

cursor = conn.cursor()

# Thực thi Left Join
query = """
SELECT e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
"""

cursor.execute(query)

# Lấy và in kết quả
for (emp_name, dept_name) in cursor:
print(f"Nhân viên: {emp_name}, Phòng ban: {dept_name if dept_name else 'Chưa được chỉ định'}")

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

Script này kết nối với cơ sở dữ liệu MySQL của bạn, thực thi truy vấn Left Join và in kết quả ra một cách thân thiện. Nó giống như có một trợ lý robot giúp bạn kết hợp bạn bè với đồ uống yêu thích của họ!

Kết luận

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của MySQL Left Joins, từ khái niệm cơ bản đến các tình huống phức tạp hơn. Nhớ rằng Left Joins là một công cụ vô cùng mạnh mẽ trong bộ công cụ SQL của bạn. Chúng cho phép bạn kết hợp dữ liệu từ nhiều bảng, đảm bảo rằng bạn không mất bất kỳ bản ghi nào từ bảng chính của mình trong quá trình.

Khi bạn tiếp tục hành trình MySQL của mình, bạn sẽ tìm thấy rất nhiều tình huống mà Left Joins sẽ rất hữu ích. Chúng giống như con dao đa năng của cơ sở dữ liệu - linh hoạt, hữu ích và đôi khi có chút khó khăn để thành thạo ban đầu.

Tiếp tục thực hành, giữ vững sự tò mò, và đừng ngại thử nghiệm với các truy vấn khác nhau. Trước khi bạn biết, bạn sẽ kết hợp bảng như một chuyên gia, gây ấn tượng bạn bè với khả năng sử dụng cơ sở dữ liệu của bạn!

Chúc các bạn thành công trong việc truy vấn, và hy vọng các join của bạn luôn thành công!

Credits: Image by storyset