Toán tử MySQL UNION cho phép bạn kết hợp hai hay nhiều kết quả từ nhiều bảng vào một kết quả.
Cú pháp:
1 2 3 4 5 | SELECT column1, column2 UNION [ DISTINCT | ALL ] SELECT column1, column2 UNION [ DISTINCT | ALL ] … |
Một số quy tắc bạn cần phải tuân theo khi sử dụng toán tử MySQL UNION.
- Số lượng các cột xuất hiện trong mỗi câu lệnh SELECT phải bằng nhau.
- Các cột xuất hiện ở các vị trí tương ứng của từng câu lệnh SELECT phải có cùng kiểu dữ liệu.
Theo mặc định, Toán tử UNION loại bỏ các hàng trùng lặp từ các kết quả ngay cả khi bạn không sử dụng mệnh đề DISTINCT một cách rõ ràng. Do đó, người ta nói rằng mệnh đề UNION là phím tắt của UNION DISTINCT
Nếu bạn sử dụng UNION ALL thì các bản ghi trùng lặp vẫn xuất hiện trong tập kết quả. Các UNION ALL thực hiện nhanh hơn so với UNION DISTINCT.
1. Sử dụng MySQL UNION có Alias.
Ví dụ: Sử dụng MySQL UNION để kết hợp dữ liệu từ hai bảng customers và employees trong CSDL mẫu.
1 2 3 4 5 | SELECT customerNumber id, contactLastname name FROM customers UNION SELECT employeeNumber id,firstname name FROM employees |
Try In Out
Kết quả:
2. Sử dụng MySQL UNION không có Alias.
Trong ví dụ trên, Tôi sử dụng bí danh cho mỗi cột trong câu lệnh SELECT. Điều gì sẽ xẩy ra nếu chúng ta không sử dụng Alias cho các cột thì MySQL sẽ sử dụng tên của các cột trong câu lệnh SELECT đầu tiên làm các tên cột cho kết quả.
Ví dụ: SELECT kết hợp giữa bảng customers và employees không sử dụng Alias.
1 2 3 4 5 6 | ( SELECT customerNumber, contactLastname FROM customers) UNION ( SELECT employeeNumber, firstname FROM employees) ORDER BY contactLastname, customerNumber |
Try In Out
Kết quả:
Như bạn đã thấy hai tên cột là customerNumber và contactLastname là hai tên cột của câu lệnh SELECT đầu tiên được sử dụng làm tên cột cho kết quả trả về.
3. MySQL UNION với mệnh đề ORDER BY
Nếu bạn muốn sắp xếp kết quả trả về từ câu lệnh SELECT có sử dụng UNION. Bạn cần sử dụng mênh đề ORDER BY ở cuối của câu lệnh SELECT. Lưu ý là bạn có thể đặt các câu lệnh SELECT trong dấu ( và ) và đặt mệnh đề ORDER BY ở cuối cùng của câu lệnh SELECT.
Ví dụ:
1 2 3 4 5 6 | ( SELECT customerNumber id,contactLastname name FROM customers) UNION ( SELECT employeeNumber id,firstname name FROM employees) ORDER BY name ,id |
Try In Out
Trong ví dụ trên đây thì đâu tiên chúng sẽ kết hợp id, name của cả hai bảng employees và customers sử dụng toán tử UNION. Sau đó chúng mới sắp xếp kết quả bở sử dụng toán tử UNION.
Chú ý rằng chúng ta đặt câu SELECT bên trong dấu ngoặc đơn và đặt mệnh đề ORDER BY ở cuối cùng của câu lệnh. Nếu bạn đặt các mệnh đề ORDER BY bên trong mỗi câu lệnh SELECT, nó sẽ không được áp dụng trong kết quả cuối cùng được tạo ra bởi toán tử UINON .
MySQL cũng cung cấp cho chúng ta một số tùy chọn cho phép bạn sắp xếp kết quả dựa trên vị trí cột sử dụng mệnh đề ORDER BY:
Ví dụ:
1 2 3 4 5 6 | ( SELECT customerNumber, contactLastname FROM customers) UNION ( SELECT employeeNumber,firstname FROM employees) ORDER BY 2, 1 |
Try In Out
4. MySQL UNION với các hàm tổng hợp.
Ban có thể sử dụng một số hàm tổng hợp e.g: COUNT, SUM, AVG để tính toán dựa trên tập kết quả trả về từ câu lệnh SELECT có sử dụng toán tử UNION.
Ví dụ:
1 2 3 4 5 | SELECT count (*) as totalRecord FROM ( ( SELECT customerNumber as ID,customerName as Name FROM customers) UNION ( SELECT employeeNumber as ID,firstName as Name FROM employees) ) AS mixTable |
Try In Out
5. MySQL UNION với mệnh đề WHERE.
Nếu bạn muốn lọc kết quả trả về từ câu lệnh SELECT sử dụng toán tử UNION. Bạn cần sử dụng mện đề WHERE cho phép bạn thiết lập một điều kiện lọc dựa vào tập kết quả trả về của câu lệnh SELECT.
Ví dụ:
1 2 3 4 5 6 | SELECT * FROM ( ( SELECT customerNumber as ID,customerName as Name FROM customers) UNION ( SELECT employeeNumber as ID,firstName as Name FROM employees) ) AS mixTable WHERE mixTable.` Name ` like '%Australian%' |
Try In Out
Kết quả:
6. Tổng kết.
Trong bài viết này tôi đã hướng dẫn các bạn sử dụng toán tử UNION để ghép hai hay nhiều kết quả từ các câu lệnh SELECT. Đây là tính năng khá hay và nó cũng có những điểm giống và khác nhau phép JOIN chúng ta sẽ tìm hiểu trong các bài tới. Từ đó bạn có thể đặt một cơ sở rằng nếu bạn có một bảng lưu trữ lượng dữ liệu quá lớn và MySQL không cho phép bạn lưu tiếp thì bạn có thể tách làm hai bảng. Trong quá trình truy vấn bạn có thể gộp thành một bảng duy nhất.