Toán tử UNION ALL trong SQL Server

Toán tử UNION ALL được dùng để kết hợp bộ kết quả từ 2 hoặc nhiều lệnh SELECT trong SQL Server.

Khác với toán tử UNION, toán tử UNION ALL trả về tất cả các hàng từ truy vấn và không xóa các hàng trùng lặp.

Mỗi lệnh SELECT trong toán tử UNION phải có cùng số cột trong bộ kết quả với kiểu dữ liệu tương ứng.

Cú pháp toán tử UNION ALL

SELECT bieu_thuc1, bieu_thuc2,  bieu_thucn FROM bang [WHERE dieu_kien] UNION ALL SELECT bieu_thuc1, bieu_thuc2,  bieu_thucn FROM bang [WHERE dieu_kien];

Tên biến hoặc giá trị biến

bieu_thuc1, bieu_thuc2, … bieu_thucn

Cột hoặc giá trị tính toán muốn lấy.

bang

Bảng muốn lấy bản ghi. Phải có ít nhất 1 bảng trong mệnh đề FROM.

WHERE dieu_kien

Tùy chọn. Điều kiện phải đáp ứng để bản ghi được chọn.

Lưu ý:

  • 2 lệnh SELECT phải có cùng số biểu thức
  • Số cột tương ứng trong mỗi lệnh SELECT phải có cùng kiểu dữ liệu
  • Toán tử UNION không xóa các hàng trùng nhau.
  • Xem thêm toán tử UNION

Ví dụ – trả về một trường thông tin

SELECT sanpham_id FROM sanpham UNION ALL SELECT sanpham_id FROM hangtonkho;

Ví dụ này trả về nhiều sanpham_id trong bộ kết quả nếu chúng có xuất hiện trong cả bảng sanpham và hangtonkho. Nếu muốn xóa các bản trùng lặp, hãy dùng toàn tử UNION.

Ví dụ – dùng ORDER BY

Toán tử UNION ALL có thể dùng mệnh đề ORDER BY để sắp xếp kết quả truy vấn.

SELECT danhba_id, danhba_ten FROM danhba WHERE ten_trang = QuanTriMang.com UNION ALL SELECT congty_id, congty_ten FROM congty WHERE ten_trang = TrangCuaBan.com ORDER BY 2;

Ở ví dụ này, vì tên cột ở 2 lệnh SELECT khác nhau nên sẽ dễ hơn khi tham chiếu tới cột trong lệnh ORDER BY bằng vị trí trong bộ kết quả. Trong ví dụ trên, ta lọc kết quả theo danhba_ten / congty_ten theo thứ tự tăng dần, như đã nói bằng cụm từ ORDER BY 2.