Trong Cơ sở dữ liệu Oracle, MINUS
toán tử được sử dụng để chỉ trả về các hàng duy nhất được trả về bởi truy vấn đầu tiên chứ không phải bởi truy vấn thứ hai.
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 |
Chúng ta có thể sử dụng MINUS
toán tử để trả lại giáo viên không phải là sinh viên:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Kết quả:
EDERNAME |
---|
Ben |
Cathy |
Vì vậy, chúng tôi chỉ nhận được các giá trị xuất hiện trong Teachers
bảng cũng không xuất hiện trong Students
bàn.
Chúng ta có thể nhận được các kết quả khác nhau, tùy thuộc vào bảng nào ở bên trái và bảng nào ở bên phải. Đây là một ví dụ đặt Students
bảng bên trái và Teachers
ở bên phải:
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;
Kết quả:
STUDENTNAME |
---|
Ein |
Faye |
Máy bay phản lực |
Spike |
Lần này, chúng tôi có những sinh viên không phải là giáo viên.
MINUS
toán tử chỉ trả về các hàng riêng biệt. Vì vậy, trong ví dụ của chúng tôi, chỉ một hàng được trả về cho Cathy
, mặc dù có hai giáo viên có tên đó.
Một giải pháp thay thế
Có thể nhận được kết quả tương tự mà không cần sử dụng MINUS
nhà điều hành. Ví dụ:chúng tôi có thể viết lại ví dụ đầu tiên của chúng tôi thành ví dụ này:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Kết quả:
EDERNAME |
---|
Ben |
Cathy |
MINUS
Tương đương trong RDBMS khác
MINUS
của Oracle toán tử tương tự với EXCEPT
toán tử mà nhiều RDBMS khác sử dụng. MariaDB có EXCEPT
nhưng nó cũng đã giới thiệu một MINUS
toán tử như một từ đồng nghĩa có thể được sử dụng khi ở chế độ Oracle.