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

SQL UNION: Kết hợp kết quả nhiều truy vấn

Khi truy vấn cơ sở dữ liệu, bạn có thể muốn kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT. Ví dụ: bạn muốn lấy danh sách thành phố nơi khách hàng sinh sống và thành phố nơi chi nhánh doanh nghiệp đặt văn phòng. Bạn có thể chạy hai truy vấn riêng biệt, nhưng đôi khi bạn muốn gộp kết quả vào một truy vấn duy nhất.

Đó là lúc toán tử SQL UNION phát huy tác dụng. Mệnh đề UNION cho phép kết hợp kết quả của hai hoặc nhiều truy vấn SELECT thành một tập kết quả đơn lẻ.

Trong hướng dẫn này, chúng ta sẽ phân tích cơ bản của toán tử SQL UNION và thảo luận về các tình huống sử dụng lệnh này khi làm việc với cơ sở dữ liệu.

Ôn tập truy vấn (Query Refresher)

Lập trình viên sử dụng truy vấn để lấy thông tin từ cơ sở dữ liệu. Truy vấn gần như luôn bắt đầu bằng câu lệnh SQL SELECT và được dùng để lấy dữ liệu dựa trên một tập tiêu chí. Truy vấn thường bao gồm toán tử FROM chỉ định bảng sẽ được truy vấn, cùng các toán tử khác để lọc dữ liệu kết quả.

Cú pháp chung cho một truy vấn SQL:

SELECT ten_cot FROM ten_bang WHERE dieu_kien_cua_ban;

Ví dụ truy vấn trả về danh sách tên tất cả nhân viên:

SELECT name FROM employees;

Kết quả truy vấn:

name
Luke
Mike
Hannah
Geoff
Alexis
Emma
Jonah

(7 hàng)

Nếu muốn lấy thông tin từ nhiều cột, hãy phân tách tên cột bằng dấu phẩy. Để lấy dữ liệu từ mọi cột, dùng dấu hoa thị (*) thay vì liệt kê tên cột.

SQL UNION

Toán tử SQL UNION kết hợp kết quả của hai hoặc nhiều truy vấn thành một phản hồi duy nhất, tạo thành một bảng kết quả.

Để sử dụng UNION, hai điều kiện phải được thỏa mãn:

  1. Kiểu dữ liệu của các cột tương ứng phải tương thích (ví dụ: cột lương là integer ở bảng này và float ở bảng kia thì UNION sẽ không hoạt động).
  2. Số lượng và thứ tự các cột phải giống nhau trong các truy vấn.

Cú pháp truy vấn SQL UNION:

SELECT ten_cot FROM bang1 UNION SELECT ten_cot FROM bang2;

Ví dụ minh họa

Giả sử doanh nghiệp cần gửi thông báo đến tất cả khách hàng và nhân viên. Chúng ta có thể dùng truy vấn sau để lấy email của cả hai nhóm:

SELECT name, email FROM employees UNION SELECT name, email FROM customers;

Kết quả:

nameemail
Emmaemma.a@gmail.com
Jonahjonah.h@gmail.com
Hannahhannah.y@gmail.com
Lukeluke.e@gmail.com
Johnjohn.p@outlook.com
Geoffgeoff.l@gmail.com
Alexisalexis.e@gmail.com
Fredfred.s@gmail.com
Erinerin.a@gmail.com
Katykaty.l@gmail.com
Anneanne.s@gmail.com
Tomtom.h@gmail.com
Mikemike.h@gmail.com
Hannahhannah.p@gmail.com

(14 hàng)

Như bạn thấy, truy vấn UNION trả về danh sách tên và email của cả nhân viên và khách hàng.

Lưu ý quan trọng: Toán tử UNION loại bỏ các hàng trùng lặp khỏi kết quả kết hợp cuối cùng. Điều này nghĩa là nếu một nhân viên đồng thời cũng là khách hàng, thông tin của họ chỉ xuất hiện một lần.

Nếu bạn muốn giữ lại các hàng trùng lặp, hãy thêm từ khóa ALL:

SELECT name, email FROM employees UNION ALL SELECT name, email FROM customers;

Kết luận

Trong hướng dẫn này, chúng ta đã phân tích cách sử dụng toán tử UNION trên máy chủ SQL. Như đã thảo luận, UNION có thể lấy dữ liệu từ hai bảng và gộp phản hồi thành một bảng đơn lẻ. Ví dụ: nếu bạn muốn lấy danh sách địa chỉ của nhà cung cấp và nhà phân phối — cả hai được lưu trong các bảng riêng biệt — bạn có thể dùng truy vấn UNION.