SQLite - UNIONS Clause
Xin chào, những pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của SQLite và khám phá điều kỳ diệu của clauses UNIONS. Là người giáo viên máy tính gần gũi của bạn, tôi sẽ hướng dẫn bạn qua cuộc phiêu lưu này từng bước một. Vậy, hãy cầm những枝 c魔法 (bàn phím) của bạn và bắt đầu nào!
What is a UNION?
Hãy tưởng tượng bạn có hai danh sách riêng biệt các hương vị kem yêu thích của bạn - một danh sách từ mùa hè năm ngoái và một danh sách từ mùa hè này. Bây giờ, nếu bạn muốn kết hợp hai danh sách này thành một danh sách siêu lớn của tất cả các hương vị kem yêu thích của bạn? Đó chính xác là điều mà UNION làm trong SQLite, nhưng với các bảng cơ sở dữ liệu thay vì các hương vị kem!
Một clauses UNION trong SQLite cho phép bạn kết hợp các tập kết quả của hai hoặc nhiều câu lệnh SELECT. Nó giống như tạo một buổi tiệc lớn nơi các nhóm dữ liệu khác nhau có thể giao tiếp và tạo thành một nhóm lớn hơn.
Cú pháp cơ bản
Cú pháp cơ bản của UNION trông như thế này:
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
Hãy phân tích này:
- Chúng ta có hai câu lệnh SELECT.
- Mỗi câu lệnh SELECT có thể truy vấn các bảng khác nhau.
- Từ khóa UNION nằm giữa các câu lệnh này, hoạt động như một cầu nối.
Quy tắc quan trọng
Trước khi chúng ta nhảy vào các ví dụ, hãy đi qua một số quy tắc quan trọng khi sử dụng UNION:
- Số lượng và thứ tự các cột trong tất cả các câu lệnh SELECT phải giống nhau.
- Các kiểu dữ liệu của các cột tương ứng nên khả thi.
- Theo mặc định, UNION loại bỏ các hàng trùng lặp (chúng ta sẽ xem cách thay đổi điều này sau).
UNION trong hành động
Hãy tạo một số bảng ví dụ và xem UNION trong hành động!
-- Tạo và điền dữ liệu vào bảng 'employees'
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);
INSERT INTO employees (name, department) VALUES
('Alice', 'HR'),
('Bob', 'IT'),
('Charlie', 'Finance');
-- Tạo và điền dữ liệu vào bảng 'contractors'
CREATE TABLE contractors (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);
INSERT INTO contractors (name, department) VALUES
('David', 'Marketing'),
('Eve', 'IT'),
('Frank', 'HR');
Bây giờ, hãy sử dụng UNION để kết hợp các bảng này:
SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;
Truy vấn này sẽ trả về:
Alice HR
Bob IT
Charlie Finance
David Marketing
Eve IT
Frank HR
Điều gì đã xảy ra ở đây? Câu lệnh UNION đã kết hợp các kết quả từ cả hai bảng, cho chúng ta một danh sách đầy đủ của tất cả nhân viên (cả nhân viên và nhà thầu) mà không có bất kỳ hàng trùng lặp nào.
Phép loại bỏ trùng lặp
Bạn có nhận thấy điều gì thú vị không? Mặc dù chúng ta có hai người trong bộ phận HR (Alice và Frank), họ đều xuất hiện trong kết quả của chúng ta. Điều này là vì UNION tự động loại bỏ các hàng trùng lặp dựa trên tất cả các giá trị cột.
Nếu chúng ta có ai đó với cùng tên và bộ phận chính xác trong cả hai bảng, UNION sẽ chỉ hiển thị họ một lần. Ví dụ:
INSERT INTO contractors (name, department) VALUES ('Alice', 'HR');
SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;
Điều này vẫn sẽ cho chúng ta cùng kết quả như trước, không có thêm 'Alice' nào trong HR.
Clauses UNION ALL
Đôi khi, bạn có thể muốn giữ lại tất cả các hàng, ngay cả khi chúng là trùng lặp. Đó là khi UNION ALL trở nên hữu ích. Nó giống như nói với cơ sở dữ liệu, "Tôi muốn mọi người tại buổi tiệc này, ngay cả khi họ có một người anh em sinh đôi!"
Hãy thay đổi truy vấn trước của chúng ta:
SELECT name, department FROM employees
UNION ALL
SELECT name, department FROM contractors;
Bây giờ chúng ta có:
Alice HR
Bob IT
Charlie Finance
David Marketing
Eve IT
Frank HR
Alice HR
Xem nào, chúng ta bây giờ có hai mục cho Alice trong HR? UNION ALL giữ lại tất cả các hàng, bất kể có trùng lặp hay không.
Ứng dụng thực tế
UNION và UNION ALL không chỉ để vui chơi - chúng có ứng dụng thực tế! Dưới đây là một vài kịch bản nơi bạn có thể sử dụng chúng:
- Kết hợp dữ liệu từ nhiều bảng có cấu trúc tương tự (như ví dụ nhân viên và nhà thầu của chúng ta).
- Tạo báo cáo跨越不同时间期或类别。
- Kết hợp dữ liệu từ các cơ sở dữ liệu hoặc nguồn dữ liệu khác nhau.
Hãy xem một ví dụ phức tạp hơn. Hãy tưởng tượng chúng ta đang quản lý một hiệu sách và muốn xem tất cả các giao dịch, bất kể chúng là mua hay trả lại:
-- Tạo và điền dữ liệu vào bảng 'purchases'
CREATE TABLE purchases (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);
INSERT INTO purchases (book_title, amount, transaction_date) VALUES
('The Great Gatsby', 15.99, '2023-06-01'),
('To Kill a Mockingbird', 12.50, '2023-06-02'),
('1984', 10.99, '2023-06-03');
-- Tạo và điền dữ liệu vào bảng 'returns'
CREATE TABLE returns (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);
INSERT INTO returns (book_title, amount, transaction_date) VALUES
('The Great Gatsby', -15.99, '2023-06-05'),
('Pride and Prejudice', -14.99, '2023-06-06');
-- Kết hợp mua và trả lại
SELECT book_title, amount, transaction_date, 'Purchase' as transaction_type
FROM purchases
UNION ALL
SELECT book_title, amount, transaction_date, 'Return' as transaction_type
FROM returns
ORDER BY transaction_date;
Truy vấn này sẽ cho chúng ta:
The Great Gatsby 15.99 2023-06-01 Purchase
To Kill a Mockingbird 12.50 2023-06-02 Purchase
1984 10.99 2023-06-03 Purchase
The Great Gatsby -15.99 2023-06-05 Return
Pride and Prejudice -14.99 2023-06-06 Return
Ở đây, chúng ta đã sử dụng UNION ALL để kết hợp mua và trả lại, thêm một cột để phân biệt giữa các loại giao dịch, và sắp xếp kết quả theo ngày.
Mẹo và thủ thuật
-
Sắp xếp kết quả: Bạn có thể thêm một câu lệnh ORDER BY ở cuối truy vấn UNION để sắp xếp kết quả kết hợp.
-
Lọc kết quả kết hợp: Sử dụng câu lệnh WHERE trong từng câu lệnh SELECT để lọc kết quả của từng bảng, hoặc bao truy vấn UNION trong một truy vấn con và áp dụng câu lệnh WHERE để lọc kết quả kết hợp.
-
Alias cho các cột: Nếu các cột của bạn có các tên khác nhau trong các bảng khác nhau, bạn có thể sử dụng别名 để làm cho chúng khớp:
SELECT name AS person, department FROM employees
UNION
SELECT contractor_name AS person, dept AS department FROM contractors;
- Kết hợp nhiều hơn hai bảng: Bạn không bị giới hạn ở chỉ hai bảng - bạn có thể nối tiếp nhiều UNION hoặc UNION ALL để kết hợp nhiều bảng.
Phương pháp phổ biến
Dưới đây là bảng tóm tắt các phương pháp phổ biến liên quan đến UNION trong SQLite:
Phương pháp | Mô tả | Ví dụ |
---|---|---|
UNION | Kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT và loại bỏ trùng lặp | SELECT * FROM table1 UNION SELECT * FROM table2 |
UNION ALL | Kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT và giữ lại tất cả các hàng, bao gồm trùng lặp | SELECT * FROM table1 UNION ALL SELECT * FROM table2 |
ORDER BY | Sử dụng với UNION để sắp xếp kết quả kết hợp | (SELECT * FROM table1 UNION SELECT * FROM table2) ORDER BY column_name |
WHERE | Sử dụng trong từng câu lệnh SELECT để lọc kết quả trước khi kết hợp | SELECT * FROM table1 WHERE condition UNION SELECT * FROM table2 WHERE condition |
Và thế là bạn đã nâng cấp kỹ năng SQLite của mình bằng cách thành thạo clauses UNION. Hãy nhớ, thực hành là cách tốt nhất để hoàn thiện, vì vậy đừng ngại thử nghiệm các truy vấn này trên các bộ dữ liệu của riêng bạn. Chúc các bạn thành công và may mắn với UNION của bạn!
Credits: Image by storyset