SQL - UNION vs UNION ALL

Xin chào các bạn yêu thích SQL! Hôm nay, chúng ta sẽ cùng nhau bắt đầu một hành trình thú vị vào thế giới của SQL, đặc biệt tập trung vào hai toán tử mạnh mẽ: UNION và UNION ALL. Là người thầy thân thiện trong lĩnh vực máy tính với nhiều năm kinh nghiệm, tôi sẽ hướng dẫn các bạn hiểu rõ các khái niệm này với sự rõ ràng, hài hước và rất nhiều ví dụ thực tế. Hãy cùng nhau khám phá nhé!

SQL - UNION vs UNION ALL

What is UNION?

Definition and Basic Concept

UNION giống như một đầu bếp tài ba kết hợp nguyên liệu từ các công thức khác nhau để tạo ra một món ăn độc đáo. Trong术语 SQL, UNION là một toán tử cho phép chúng ta kết hợp các tập kết quả của hai hoặc nhiều câu lệnh SELECT thành một tập kết quả duy nhất.

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

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

Key Features of UNION

  1. Distinct Results: UNION tự động loại bỏ các hàng trùng lặp trong tập kết quả cuối cùng.
  2. Column Compatibility: Các câu lệnh SELECT phải có số lượng cột相同, và các cột này nên có các loại dữ liệu tương thích.
  3. Order of Columns: Thứ tự các cột trong các câu lệnh SELECT quan trọng, vì chúng được kết hợp dựa trên vị trí của chúng.

UNION in Action

Hãy tưởng tượng chúng ta có hai bảng: fruitsvegetables. Chúng ta muốn tạo một danh sách kết hợp tất cả các loại rau quả.

-- fruits table
CREATE TABLE fruits (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO fruits VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange');

-- vegetables table
CREATE TABLE vegetables (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);

INSERT INTO vegetables VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red');

-- UNION query
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;

Câu truy vấn này sẽ cho chúng ta:

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

Chú ý rằng chúng ta chỉ có một mục 'Orange', mặc dù nó xuất hiện trong cả hai bảng. Đó là phép màu của UNION - nó loại bỏ các trùng lặp!

What is UNION ALL?

Definition and Basic Concept

Bây giờ, hãy gặp UNION ALL - cousin hăng hái của UNION. Trong khi UNION giống như một đầu bếp cẩn thận loại bỏ các nguyên liệu trùng lặp, UNION ALL giống như một đầu bếp tin rằng "càng nhiều càng vui!"

Cú pháp tương tự UNION:

SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;

Key Features of UNION ALL

  1. Retains Duplicates: UNION ALL giữ lại tất cả các hàng, bao gồm cả các hàng trùng lặp.
  2. Faster Performance: Vì nó không cần loại bỏ các hàng trùng lặp, UNION ALL thường nhanh hơn UNION.
  3. Column Compatibility: Như UNION, nó yêu cầu số lượng cột相同 và các loại dữ liệu tương thích.

UNION ALL in Action

Hãy sử dụng lại các bảng fruitsvegetables:

SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;

Câu truy vấn này sẽ tạo ra:

name color
Apple Red
Banana Yellow
Orange Orange
Carrot Orange
Broccoli Green
Tomato Red

Chú ý rằng我们现在有两个 'Orange' mục - một từ trái cây và một từ rau quả. UNION ALL giữ lại tất cả các hàng, bao gồm cả các hàng trùng lặp!

UNION vs UNION ALL: A Head-to-Head Comparison

Để thực sự hiểu sự khác biệt, hãy so sánh chúng bên nhau:

Feature UNION UNION ALL
Duplicate Handling Removes duplicates Retains all duplicates
Performance Slower (due to deduplication) Faster
Result Set Size Potentially smaller Potentially larger
Use Case When unique results are needed When all results, including duplicates, are required

When to Use UNION

Sử dụng UNION khi bạn cần kết hợp kết quả từ nhiều truy vấn và muốn đảm bảo rằng mỗi hàng trong tập kết quả là duy nhất. Nó phù hợp cho các tình huống như:

  1. Kết hợp danh sách khách hàng từ các khu vực khác nhau, đảm bảo không có trùng lặp.
  2. Kết hợp danh mục sản phẩm từ các nhà cung cấp khác nhau, loại bỏ các mục trùng lặp.

When to Use UNION ALL

Chọn UNION ALL khi:

  1. Bạn biết rằng không có trùng lặp trong các tập dữ liệu của bạn.
  2. Bạn đặc biệt cần giữ lại tất cả các hàng, bao gồm cả các hàng trùng lặp.
  3. Hiệu suất là ưu tiên, và bạn đang làm việc với các tập dữ liệu lớn.

Practical Examples

Hãy cùng khám phá một số tình huống thực tế để巩固 hiểu biết của chúng ta.

Example 1: Employee Directory

Hãy tưởng tượng chúng ta có hai bảng: current_employeesformer_employees. Chúng ta muốn tạo một danh sách đầy đủ.

-- Create and populate tables
CREATE TABLE current_employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE former_employees (id INT, name VARCHAR(50), department VARCHAR(50));

INSERT INTO current_employees VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');

INSERT INTO former_employees VALUES
(4, 'David', 'Marketing'),
(5, 'Eve', 'IT'),
(2, 'Bob', 'IT');  -- Bob đã từng làm việc ở đây, rời đi và quay lại

-- UNION query
SELECT name, department FROM current_employees
UNION
SELECT name, department FROM former_employees;

-- UNION ALL query
SELECT name, department FROM current_employees
UNION ALL
SELECT name, department FROM former_employees;

Câu truy vấn UNION sẽ hiển thị Bob chỉ một lần, trong khi UNION ALL sẽ hiển thị Bob hai lần.

Example 2: Sales Report

Hãy tạo một báo cáo doanh số kết hợp doanh số trực tuyến và doanh số tại cửa hàng.

-- Create and populate tables
CREATE TABLE online_sales (product VARCHAR(50), amount DECIMAL(10,2));
CREATE TABLE store_sales (product VARCHAR(50), amount DECIMAL(10,2));

INSERT INTO online_sales VALUES
('Laptop', 1200.00),
('Phone', 800.00),
('Tablet', 500.00);

INSERT INTO store_sales VALUES
('Laptop', 1100.00),
('Phone', 750.00),
('Headphones', 200.00);

-- Total unique products sold (UNION)
SELECT product FROM online_sales
UNION
SELECT product FROM store_sales;

-- All sales entries (UNION ALL)
SELECT 'Online' AS source, product, amount FROM online_sales
UNION ALL
SELECT 'Store' AS source, product, amount FROM store_sales;

Câu truy vấn UNION cho chúng ta danh sách các sản phẩm bán ra duy nhất qua cả hai kênh, trong khi UNION ALL cung cấp danh sách đầy đủ tất cả các giao dịch bán hàng.

Conclusion

Và thế là chúng ta đã cùng nhau khám phá qua các vùng đất của UNION và UNION ALL, tìm hiểu về sự tương tự, khác biệt và các ứng dụng thực tế của chúng. Nhớ rằng, UNION là lựa chọn của bạn cho kết quả duy nhất, đã loại bỏ trùng lặp, trong khi UNION ALL là người bạn nhanh chóng khi bạn cần tất cả dữ liệu, bao gồm cả trùng lặp.

Trong hành trình SQL của bạn, bạn sẽ tìm thấy rất nhiều cơ hội để sử dụng các công cụ mạnh mẽ này. Giống như trong nấu ăn, biết khi nào sử dụng từng nguyên liệu (hoặc trong trường hợp của chúng ta, toán tử) là chìa khóa để tạo ra công thức truy vấn hoàn hảo.

Tiếp tục thực hành, 保持 sự tò mò, và đừng ngại thử nghiệm với các khái niệm này. Trước khi bạn biết, bạn sẽ UNION và UNION ALL như một chuyên gia! Chúc các bạn thành công trong việc truy vấn!

Credits: Image by storyset