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

Người điều hành MariaDB UNION đã giải thích

Trong MariaDB, UNION toán tử kết hợp các kết quả từ nhiều SELECT các câu lệnh vào một tập kết quả duy nhất.

Cú pháp

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

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

Từ MariaDB 10.4.0, dấu ngoặc đơn có thể được sử dụng để chỉ định mức độ ưu tiên.

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 |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.003 sec)

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 |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.004 sec)

Vì vậy, chúng tôi nhận được cùng một kết quả mà chúng tôi nhận được mà không có DISTINCT nhà điều hành.

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 in set (0.002 sec)

Lần này chúng ta có mười hai hàng thay vì tám 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. Cách cài đặt và bảo mật MariaDB trên Debian 9

  2. Hướng dẫn về Chỉ mục MySQL

  3. Giải thích về toán tử MariaDB MINUS

  4. Cách RLIKE hoạt động trong MariaDB

  5. MariaDB JSON_TYPE () Giải thích