Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kết hợp nhiều truy vấn SELECT phức tạp trong MySQL với UNION

Phương pháp

Sử dụng UNION (loại bỏ trùng lặp) hoặc UNION ALL (giữ trùng lặp) để gộp kết quả nhiều truy vấn SELECT.

Ví dụ

Tạo 2 bảng:

CREATE TABLE DemoTable1 (Value1 INT, Value2 INT);
CREATE TABLE DemoTable2 (Number1 INT, Number2 INT);

Chèn dữ liệu:

INSERT INTO DemoTable1 VALUES (10,29), (100,190), (40,101);
INSERT INTO DemoTable2 VALUES (100,290), (200,390), (50,170);

Gộp với UNION và sắp xếp:

(SELECT Value1, Value2 FROM DemoTable1)
UNION
(SELECT Number1 AS Value1, Number2 AS Value2 FROM DemoTable2)
ORDER BY Value1 DESC;

Kết quả:

+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 200    | 390    |
| 100    | 290    |
| 100    | 190    |
| 50     | 170    |
| 40     | 101    |
| 10     | 29     |
+--------+--------+

Quy tắc UNION

  • Số cột và thứ tự cột phải khớp nhau.
  • Kiểu dữ liệu tương thích (numeric với numeric, string với string).
  • Tên cột kết quả lấy từ SELECT đầu tiên (có thể dùng ALIAS để đồng nhất).
  • ORDER BY áp dụng cho toàn bộ kết quả gộp (viết ở cuối).

UNION vs UNION ALL

Đặc điểmUNIONUNION ALL
Trùng lặpLoại bỏ (DISTINCT)Giữ lại tất cả
Hiệu năngChậm hơn (cần sort/hash để dedup)Nhanh hơn
Dùng khiCần kết quả uniqueBiết chắc không trùng hoặc chấp nhận trùng

Mẹo nâng cao

  • Dùng UNION ALL + wrap trong subquery + DISTINCT nếu cần kiểm soát vị trí dedup.
  • Kết hợp với LIMIT trong từng SELECT để phân trang union.
  • Có thể dùng WITH (CTE) để tổ chức code rõ ràng hơn (MySQL 8.0+).