SQL - UNION vs 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! Tôi rất vui mừng được làm hướng dẫn viên của bạn trong hành trình thú vị qua thế giới SQL. Hôm nay, chúng ta sẽ giải mã những bí ẩn của UNION và JOIN, hai thao tác mạnh mẽ trong SQL có thể ban đầu看起来 phức tạp nhưng sẽ nhanh chóng trở thành những người bạn tốt nhất của bạn trong việc xử lý dữ liệu. Vậy, hãy lấy một tách cà phê, ngồi thoải mái, và cùng chúng ta bắt đầu nhé!

SQL - Union vs Join

Hiểu biết cơ bản

Trước khi chúng ta đi sâu vào UNION và JOIN, hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng bạn đang tổ chức một buổi tiệc và bạn có hai danh sách khách: một cho bạn bè và một cho gia đình. Bây giờ, bạn có hai lựa chọn:

  1. Kết hợp cả hai danh sách thành một danh sách lớn (đó là UNION)
  2. Tìm ra những người bạn nào trong danh sách bạn bè cũng là người thân của bạn (đó là JOIN)

Th听起来 có thú vị chứ? Tuyệt vời! Hãy cùng khám phá từng thao tác này chi tiết hơn.

Cách hoạt động của UNION

UNION là gì?

UNION giống như một người lập danh sách master trong SQL. Nó lấy hai hoặc nhiều câu lệnh SELECT và kết hợp kết quả của chúng thành một tập hợp duy nhất. Đó là lựa chọn hoàn hảo khi bạn muốn合并 dữ liệu từ các bảng khác nhau có cấu trúc tương tự.

UNION trong hành động

Giả sử chúng ta có hai bảng: employees_usaemployees_uk. Chúng ta muốn lấy danh sách tất cả nhân viên, không phân biệt vị trí của họ.

SELECT first_name, last_name, country
FROM employees_usa
UNION
SELECT first_name, last_name, country
FROM employees_uk;

Truy vấn này sẽ cho chúng ta danh sách kết hợp tất cả nhân viên từ cả hai văn phòng ở USA và UK. Đẹp phải không?

UNION ALL: Người thân ruột riết

Bây giờ, nếu chúng ta muốn bao gồm các mục duplicate, UNION ALL sẽ rất hữu ích.

SELECT product_name, category
FROM products_2021
UNION ALL
SELECT product_name, category
FROM products_2022;

Truy vấn này sẽ liệt kê tất cả các sản phẩm từ cả năm 2021 và 2022, bao gồm cả các sản phẩm duplicate nếu một sản phẩm có sẵn trong cả hai năm.

Những điểm cần nhớ

  1. UNION loại bỏ các hàng duplicate theo mặc định
  2. UNION ALL giữ lại tất cả các hàng, bao gồm cả duplicate
  3. Số lượng và thứ tự các cột phải giống nhau trong tất cả các câu lệnh SELECT
  4. Loại dữ liệu của các cột tương ứng nên khả thi

Cách hoạt động của JOIN

JOIN là gì?

Nếu UNION là một người lập danh sách, JOIN giống như một người làm đôi. 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. Đó là lựa chọn hoàn hảo khi bạn muốn truy xuất dữ liệu trải rộng qua nhiều bảng.

Các loại JOIN

Hãy phân tích các loại JOIN khác nhau bằng một ví dụ vui vẻ. Hãy tưởng tượng bạn đang ở một buổi khiêu vũ:

  1. INNER JOIN: Chỉ ghép đôi những vũ công biết cùng một điệu nhảy
  2. LEFT JOIN: Ghép đôi tất cả các vũ công từ bên trái, ngay cả khi họ không có đối tác
  3. RIGHT JOIN: Ghép đôi tất cả các vũ công từ bên phải, ngay cả khi họ không có đối tác
  4. FULL JOIN: Ghép đôi tất cả các vũ công, ngay cả khi một số người kết thúc việc khiêu vũ một mình

JOIN trong hành động

Hãy xem cách các JOIN này hoạt động trong các truy vấn SQL thực tế:

INNER JOIN

SELECT customers.name, orders.order_date
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

Truy vấn này sẽ hiển thị tất cả các khách hàng đã đặt hàng, cùng với ngày đặt hàng của họ.

LEFT JOIN

SELECT employees.name, departments.dept_name
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.id;

Truy vấn này sẽ liệt kê tất cả các nhân viên, ngay cả những người không được phân công vào bất kỳ phòng ban nào.

RIGHT JOIN

SELECT products.name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id = categories.id;

Truy vấn này sẽ hiển thị tất cả các danh mục, ngay cả khi không có sản phẩm nào trong đó.

FULL JOIN

SELECT students.name, courses.course_name
FROM students
FULL JOIN enrollments ON students.id = enrollments.student_id
FULL JOIN courses ON enrollments.course_id = courses.id;

Truy vấn này sẽ liệt kê tất cả học sinh và tất cả các khóa học, ngay cả khi một số học sinh không đăng ký bất kỳ khóa học nào hoặc một số khóa học không có học sinh.

UNION vs JOIN: Cuộc đối đầu

Bây giờ chúng ta đã khám phá cả UNION và JOIN, hãy so sánh chúng bên nhau:

Mặt bằng UNION JOIN
Mục đích Kết hợp các hàng từ bảng tương tự Kết hợp các cột từ bảng liên quan
Kết quả Kết hợp dọc (nhiều hàng) Kết hợp ngang (nhiều cột)
Cấu trúc bảng Phải có số lượng cột alike Có thể có số lượng cột khác nhau
Xử lý duplicate Loại bỏ duplicate (trừ UNION ALL) Giữ lại tất cả các hàng ghép
Hiệu suất Nói chung nhanh hơn cho các tập dữ liệu lớn Có thể chậm hơn cho các ghép phức tạp
Trường hợp sử dụng Kết hợp dữ liệu alike từ các nguồn khác nhau Truy xuất dữ liệu liên quan qua các bảng

Kết luận: Chọn giữa UNION và JOIN

Vậy, khi nào bạn nên sử dụng UNION và khi nào nên chọn JOIN? Dưới đây là một quy tắc đơn giản:

  • Sử dụng UNION khi bạn muốn kết hợp dữ liệu alike từ các bảng khác nhau thành một danh sách duy nhất.
  • Sử dụng JOIN khi bạn muốn truy xuất dữ liệu liên quan trải qua nhiều bảng.

Nhớ rằng, giống như việc chọn đúng công cụ cho công việc, việc chọn giữa UNION và JOIN phụ thuộc vào nhu cầu dữ liệu cụ thể của bạn. Với sự luyện tập, bạn sẽ phát triển trực giác để biết khi nào nên sử dụng cái nào trong các tình huống khác nhau.

Tôi hy vọng hướng dẫn này đã giúp bạn hiểu rõ UNION và JOIN hơn. Hãy tiếp tục luyện tập, 保持好奇心, và trước khi bạn nhận ra, bạn sẽ nhảy qua các truy vấn SQL như một chuyên gia! Chúc bạn vui vẻ với mã code!

Credits: Image by storyset