MySQL - UNION vs UNION ALL
Xin chào, các pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của MySQL và khám phá hai toán tử mạnh mẽ: UNION và UNION ALL. Cuối bài hướng dẫn này, bạn sẽ có thể kết hợp dữ liệu như một chuyên gia! Hãy chuẩn bị đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu nhé!
Toán tử UNION trong MySQL
UNION là gì?
UNION giống như một cây c魔法 trong MySQL, cho phép chúng ta kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT. Nó giống như mời các nhóm bạn khác nhau đến một bữa tiệc lớn - mọi người đều đến, nhưng những bản sao bị mời rời khỏi.
UNION hoạt động như thế nào?
Khi bạn sử dụng UNION, nó thực hiện các bước sau:
- Thực thi nhiều câu lệnh SELECT
- Kết hợp kết quả
- Loại bỏ các hàng trùng lặp
- Trả về tập hợp duy nhất của các hàng
Cú pháp UNION
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
Ví dụ UNION
Giả sử chúng ta có hai bảng: fruits
và vegetables
. Chúng ta muốn tạo một danh sách tất cả các sản phẩm nông nghiệp.
-- Tạo và điền dữ liệu cho bảng fruits
CREATE TABLE fruits (
id INT PRIMARY KEY,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO fruits (id, name, color) VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange'),
(4, 'Grape', 'Purple');
-- Tạo và điền dữ liệu cho bảng vegetables
CREATE TABLE vegetables (
id INT PRIMARY KEY,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO vegetables (id, name, color) VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red'),
(4, 'Eggplant', 'Purple');
-- Bây giờ, hãy sử dụng UNION để kết hợp fruits và vegetables
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;
Truy vấn này sẽ trả về:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Grape | Purple |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Eggplant | Purple |
Chú ý rằng chúng ta có 8 hàng thay vì 10? Đó là vì UNION đã loại bỏ các mục trùng lặp 'Orange' và 'Purple'!
Toán tử UNION ALL trong MySQL
UNION ALL là gì?
UNION ALL giống như người cousin thoải mái hơn của UNION. Nó kết hợp kết quả của nhiều câu lệnh SELECT, nhưng không lo lắng về việc loại bỏ các bản sao. Nó giống như tổ chức một bữa tiệc mà mọi người đều được mời, và không ai bị từ chối!
UNION ALL hoạt động như thế nào?
UNION ALL thực hiện các bước sau:
- Thực thi nhiều câu lệnh SELECT
- Kết hợp tất cả các kết quả, bao gồm các bản sao
- Trả về tập hợp cuối cùng của các hàng (có thể bao gồm các bản sao)
Cú pháp UNION ALL
SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2;
Ví dụ UNION ALL
Hãy sử dụng lại các bảng fruits và vegetables, nhưng lần này với UNION ALL:
SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;
Truy vấn này sẽ trả về:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Grape | Purple |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Eggplant | Purple |
Bây giờ chúng ta có tất cả 10 hàng, bao gồm cả các màu trùng lặp!
So sánh UNION và UNION ALL trong MySQL
Bây giờ chúng ta đã thấy cả UNION và UNION ALL trong hành động, hãy so sánh chúng bên nhau:
Tính năng | UNION | UNION ALL |
---|---|---|
Loại bỏ trùng lặp | Có | Không |
Hiệu suất | Chậm hơn (do việc loại bỏ trùng lặp) | Nhanh hơn |
Sử dụng bộ nhớ | Cao hơn | Thấp hơn |
Trường hợp sử dụng | Khi cần kết quả duy nhất | Khi cần tất cả các kết quả, bao gồm các bản sao |
Khi nào nên sử dụng 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 không có trùng lặp. Nó rất tốt cho các tình huống như:
- Tạo danh sách duy nhất của khách hàng từ các cơ sở dữ liệu khác nhau
- Kết hợp kết quả tìm kiếm từ nhiều bảng
- Tạo báo cáo yêu cầu các giá trị duy nhất
-- Ví dụ: Tìm tất cả các màu duy nhất của quả và rau
SELECT color FROM fruits
UNION
SELECT color FROM vegetables;
Khi nào nên sử dụng UNION ALL
Sử dụng UNION ALL khi bạn muốn kết hợp tất cả các kết quả, bao gồm các bản sao, hoặc khi bạn biết không có trùng lặp và muốn hiệu suất tốt hơn. Nó lý tưởng cho:
- Kết hợp dữ liệu từ nhiều nguồn
- Tích hợp dữ liệu nơi các bản sao quan trọng
- Kết hợp dữ liệu từ các tập hợp không trùng lặp
-- Ví dụ: Đếm tất cả các sản phẩm theo màu, bao gồm các bản sao
SELECT color, COUNT(*) as total FROM (
SELECT color FROM fruits
UNION ALL
SELECT color FROM vegetables
) AS all_produce
GROUP BY color;
Kết luận
Và thế là bạn đã có nó, các em học sinh yêu dấu! Chúng ta đã cùng nhau hành trình qua vùng đất của UNION và UNION ALL, khám phá sự tương tự và khác biệt của chúng. Nhớ rằng, UNION giống như một người chủ bữa tiệc cẩn thận đảm bảo rằng mọi người đều duy nhất, trong khi UNION ALL là người bạn "càng nhiều càng vui vẻ" chào đón tất cả mọi người.
Trong hành trình MySQL của bạn, bạn sẽ tìm thấy vô số tình huống nơi các toán tử này rất hữu ích. Chỉ cần nhớ: khi bạn cần kết quả duy nhất, hãy chọn UNION. Khi bạn muốn tất cả và muốn nó nhanh chóng, UNION ALL sẽ là người bạn của bạn.
Bây giờ, hãy thử kết hợp các bảng khác nhau trong cơ sở dữ liệu của bạn bằng cả UNION và UNION ALL. Thử nghiệm, mắc lỗi và học từ chúng. Đó là cách tốt nhất để thực sự thành thạo các khái niệm này.
Đến gặp lại, chúc các bạn query vui vẻ và UNION của bạn luôn thành công!
Credits: Image by storyset