Gộp kết quả với toán tử UNION trong MySQL
Nếu bạn cần viết hai câu truy vấn SELECT khác nhau nhưng bạn muốn nó trả về một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION. Toán tử này cũng ít khi sử dụng khi bạn viết ứng dụng Web nhưng cũng nên tìm hiểu vì biết đâu sau này cần.
1. Toán tử UNION trong MySQL
Toán tử UNION
cho phép bạn nối kết quả của hai hoặc nhiều câu truy vấn lại với nhau để trở thành một danh sách kết quả duy nhất. Cú pháp của MySQL UNION
như sau:
SELECT column1, column2 UNION [DISTINCT | ALL] SELECT column1, column2 UNION [DISTINCT | ALL] …
Bài viết này được đăng tại [free tuts .net]
Tuy nhiên khi sử dụng UNION trong MySQL chúng ta cần phải tuân thủ những nguyên tắc sau đây:
- Số lượng colums trong tất cả các lệnh
SELECT
phải bằng nhau - Mỗi column tương ứng vị trí phải có cùng kiểu dữ liệu và độ dài
Theo mặc định thì UNION
sẽ loại bỏ các kết quả trùng lặp của các câu SELECT
nên nó tạo cho chúng ta hai lựa chọn sau:
- Nếu chọn
UNION DISTINCT
thì nó sẽ loại bỏ kết quả trùng. - Nếu chọn
UNION ALL
thì nó giữ lại kết quả trùng. - Nếu bạn không chọn gì thì mặc định nó sẽ lấy
UNION DISTINCT
2. Một số ví dụ UNION trong MySQL
Trước tiên bạn tạo database, hai tables và thêm một số dữ liệu bằng cách chạy lệnh SQL sau:
CREATE DATABASE uni_db; USE uni_db; CREATE TABLE news_1 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; CREATE TABLE news_2 ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) ) ENGINE = INNODB; INSERT INTO news_1(title) VALUES('Tin Thoi Su'); INSERT INTO news_1(title) VALUES('Tin The Thao'); INSERT INTO news_1(title) VALUES('Tin Quoc Te'); INSERT INTO news_1(title) VALUES('Tin Do day'); INSERT INTO news_1(title) VALUES('Tin Khung Bo'); INSERT INTO news_2(title) VALUES('Ngay Quoc Te'); INSERT INTO news_2(title) VALUES('Ngay Phu Nu'); INSERT INTO news_2(title) VALUES('The Gioi Do Day'); INSERT INTO news_2(title) VALUES('Chien Tranh The Gioi II'); INSERT INTO news_2(title) VALUES('Du Hoc Vien');
Dữ liệu Table news_1:
Dữ liệu trang news_2:
Ok, bây giờ ta làm một số ví dụ để các bạn hiểu rõ hợn lệnh UNION
trong MySQL
này.
SELECT id, title FROM news_1 UNION SELECT id, title FROM news_2
Kết quả:
SELECT id FROM news_1 UNION SELECT id FROM news_2
Kết quả:
Rõ ràng UNION
đã bị xóa đi kết quả trùng vì đáng lẽ ra nó phải hiển thị 10 kết quả nhưng ở đây nó hiển thị có 5 kết quả.
Bây giờ ta sử dụng lệnh ALL
để xem thế nào.
SELECT id FROM news_1 UNION ALL SELECT id FROM news_2
Kết quả:
Với lệnh ALL
thì dù bị trùng lặp nhưng nó vẫn trả về kết quả.
3. Lời kết
Toán tử UNION trong MySQL rất ít sử dụng khi xây dựng ứng dụng website mà thay vào đó sử dụng các lệnh UPDATE
, ADD
và SELECT
nhiều hơn. Bài này cũng tương đối ngắn vì kiến thức đơn giản và dễ hiểu, kể từ bài sau chúng ta tìm hiểu về lệnh JOIN
, đây là một lệnh khá khó đối với những bạn mới học MySQL
.