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

Giải thích về nhà điều hành Oracle UNION

Trong Cơ sở dữ liệu Oracle, UNION toán tử cho phép chúng tôi kết hợp các kết quả từ hai truy vấn thành một tập kết quả duy nhất.

Ví dụ

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

SELECT * FROM Teachers;
SELECT * FROM Students;

Kết quả:

GIÁO VIÊN GIẢNG VIÊN
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Hóa đơn
6 Hóa đơn
STUDENTID STUDENTNAME
1 Faye
2 Máy bay phản lực
3 Spike
4 Ein
5 Warren
6 Hóa đơn

Đây là một ví dụ về việc sử dụng UNION toán tử để trả về tên của tất cả giáo viên và học sinh:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Kết quả:

EDERNAME
Ben
Hóa đơn
Cathy
Ein
Faye
Máy bay phản lực
Spike
Warren

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).

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ả:

EDERNAME
Warren
Ben
Cathy
Cathy
Hóa đơn
Hóa đơn
Faye
Máy bay phản lực
Spike
Ein
Warren
Hóa đơn

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.

Một số điều cần nhớ

Lưu ý rằng các biểu thức phải khớp ở dạng số và phải nằm trong cùng một nhóm kiểu dữ liệu. Do đó, chúng tôi không thể làm những việc sau:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Kết quả:

ORA-01789: query block has incorrect number of result columns

Hoặc cái này:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Kết quả:

ORA-01790: expression must have same datatype as corresponding expression

Mặc dù, chúng ta có thể sử dụng các hàm như TO_CHAR() để chuyển đổi một cột thành một nhóm kiểu dữ liệu phù hợp:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Kết quả:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh ngày trong Oracle SQL

  2. Dù sao thì phiên bản chính là gì?

  3. Cách tạo người dùng trong Oracle Multitenant 12c không có tiền tố C ##

  4. Tại sao DECODE của Oracle lại cho tôi một giá trị khác với NVL?

  5. điều gì xảy ra trong giai đoạn chuyển tiếp của việc áp dụng trong R12.2