PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách UNION hoạt động trong PostgreSQL

Trong PostgreSQL, UNION toán tử kết hợp các kết quả từ nhiều truy vấn thành một tập kết quả duy nhất.

Cú pháp

Cú pháp chính thức như sau:

query1 UNION [ALL] query2

UNION toán tử nối kết quả của query2 đến kết quả của query1 (mặc dù không có gì đảm bảo rằng đây là thứ tự mà các hàng thực sự được trả về).

Các hàng trùng lặp sẽ bị loại bỏ trừ khi UNION ALL được sử dụng.

Ví dụ

Giả sử chúng ta có các bảng sau:

SELECT * FROM Teachers;
SELECT * FROM Students;

Kết quả:

 teacherid | teachername 
-----------+-------------
         1 | Warren
         2 | Ben
         3 | Cathy
         4 | Cathy
         5 | Bill
         6 | Bill

 studentid | studentname 
-----------+-------------
         1 | Faye
         2 | Jet
         3 | Spike
         4 | Ein
         5 | Warren
         6 | Bill

Chúng ta có thể sử dụng UNION toán tử để trả về tất cả giáo viên và học sinh:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Kết quả:

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Theo mặc định, UNION toán tử áp dụng ngầm một DISTINCT hoạt động. Nói cách khác, nó chỉ trả về các giá trị riêng biệt theo mặc định. Vì vậy, các kết quả trên chỉ chứa một trong số Warren, Cathy và Bill. Điều này là mặc dù thực tế là các bảng kết hợp thực sự chứa hai Warrens, hai Cathys và ba Bills (có hai giáo viên tên là Cathy, một giáo viên và một khách hàng tên là Warren, và hai người tên là Bill, cũng như một học sinh tên là Bill).

Dưới đây là một ví dụ sử dụng rõ ràng DISTINCT nhà điều hành:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Kết quả:

 teachername 
-------------
 Spike
 Ben
 Ein
 Cathy
 Jet
 Faye
 Bill
 Warren
(8 rows)

Kết quả tương tự.

Bao gồm các bản sao

Chúng ta có thể sử dụng ALL từ khóa để bao gồm các giá trị trùng lặp trong kết quả:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Kết quả:

 teachername 
-------------
 Warren
 Ben
 Cathy
 Cathy
 Bill
 Bill
 Faye
 Jet
 Spike
 Ein
 Warren
 Bill
(12 rows)

Lần này chúng ta có 12 hàng thay vì 8 hàng như trong ví dụ đầu tiên.

Chúng ta có thể thấy rằng cả hai Cathys đã được trả lại và cả ba Hóa đơn đã được trả lại.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:truyền chuỗi thành ngày DD / MM / YYYY

  2. PostgreSQL - Viết sql động trong thủ tục được lưu trữ trả về tập kết quả

  3. Lỗi khi đẩy dữ liệu sang Heroku:dịch chuyển múi giờ ra khỏi phạm vi

  4. Truyền kiểu NULL khi cập nhật nhiều hàng

  5. SSL cho kết nối PostgreSQL nodejs