Toán tử được sử dụng để nối hoặc kết hợp hai truy vấn không ai khác chính là toán tử SET. Các toán tử được phân loại thành các toán tử SET như sau:
- Nhà điều hành UNION. Nhà điều hành của
- UNION ALL.
- Toán tử INTERSECT.
- Nhà điều hành MINUS.
Các quy tắc cần tuân thủ để vận hành bằng Toán tử SET như sau:
- Số lượng cột và thứ tự các cột phải giống nhau.
- Loại dữ liệu phải tương thích.
Hãy hiểu từng Toán tử SET bằng các ví dụ.
Hãy xem xét các bảng sau cùng với các bản ghi đã cho.
Bảng 1:Nhân viên
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID | WORKING_HOURS | GIỚI TÍNH |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACHI | SHARMA | 55500 | ĐIỀU CHỈNH | ORACLE | 1 | 10 | F |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | KIỂM TRA | 4 | 9 | F |
3001 | PRANOTI | CHIA SẺ | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | Ở ĐÂU | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 | 12 | M |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 | 10 | M |
Bảng 2:Nhân viên.
EMPLOYEEID | FIRST_NAME | LAST_NAME | TIỀN LƯƠNG | THÀNH PHỐ | KHOA | MANAGERID | WORKING_HOURS | GIỚI TÍNH |
1001 | Vaibhav | Sharma | 65000 | PUNE | ORACLE | 1 | 12 | M |
1002 | Nikhil | Vani | 60000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | Vaibhavi | Mishra | 50000 | JAIPUR | FMW | 2 | 10 | F |
2001 | Ruchika | Jain | 55500 | ĐIỀU CHỈNH | ORACLE | 1 | 10 | F |
2002 | Thực tế | Sharma | 65500 | PUNE | FMW | 2 | 12 | F |
2003 | Bhavesh | Jain | 50000 | MUMBAI | KIỂM TRA | 4 | 9 | M |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 | 9 | M |
3002 | ANUJA | Ở ĐÂU | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 | 12 | F |
4001 | RAJESH | MỤC TIÊU | 60500 | MUMBAI | KIỂM TRA | 4 | 10 | M |
Bảng 3:Người quản lý.
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | KIỂM TRA |
Bảng 4:Người quản lý1.
Managerid | manager_name | manager_department |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | KIỂM TRA |
Nhà điều hành UNION
Toán tử UNION là Toán tử đầu tiên được sử dụng để hợp nhất hoặc kết hợp hai hoặc nhiều câu lệnh SELECT. Nếu và chỉ khi số lượng cột và thứ tự các cột giống nhau.
Các hàng trùng lặp sẽ không được xem xét trong kết quả thu được sau khi thực hiện thao tác UNION.
Cú pháp cho hoạt động UNION như sau,
SELECT * FROM TABLE_NAME1 UNION SELECT * FROM TABLE_NAME2;
Ví dụ 1: Thực thi truy vấn để thực hiện thao tác UNION giữa bảng Nhân viên và bảng Nhân viên.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên truy xuất dữ liệu từ nhân viên và truy vấn SELECT thứ hai lấy dữ liệu từ dữ liệu nhân viên và hoạt động UNION được thực hiện trên cả hai truy vấn SELECT.
Thao tác UNION sẽ loại bỏ các hàng trùng lặp giữa cả hai bảng. Kết quả sau được hiển thị là:
Cả hai bản ghi bảng đều được hiển thị ngoại trừ các bản ghi trùng lặp.
Ví dụ 2: Thực thi truy vấn để thực hiện thao tác UNION giữa bảng Nhân viên và bảng Nhân viên. Nhưng chỉ hiển thị hồ sơ của những nhân viên đó từ bảng nhân viên thuộc thành phố Mumbai và từ bảng nhân viên chỉ hiển thị hồ sơ của những nhân viên có mức lương nhân viên lớn hơn 50000 và dưới 60000.
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION SELECT * FROM EMPLOYEE WHERE SALARY > 50000 AND SALARY < 60000;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên chỉ tìm nạp những bản ghi có nhân viên thuộc thành phố Mumbai từ bảng Nhân viên. Và thực hiện thao tác UNION với truy vấn SELECT thứ hai chỉ tìm nạp những bản ghi có mức lương của nhân viên lớn hơn 50000 nhưng dưới 60000 từ bảng nhân viên. Thao tác UNION sẽ loại bỏ các hàng trùng lặp giữa cả hai bảng.
Kết quả sau được hiển thị dưới dạng:
Cả hai bản ghi bảng đều được hiển thị ngoại trừ các bản ghi trùng lặp.
Ví dụ 3: Thực thi truy vấn để thực hiện thao tác UNION giữa bảng Nhân viên và bảng Nhân viên. Chúng tôi chỉ muốn các bản ghi đó từ bảng Nhân viên có thành phố nhân viên thuộc về 'Pune' và 'Jaipur'.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'JAIPUR') UNION SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp những bản ghi có nhân viên thuộc thành phố 'Pune' và 'Jaipur' từ bảng Nhân viên. Hoạt động UNION được thực hiện với các bản ghi được truy xuất từ truy vấn SELECT thứ hai từ nhân viên bảng.
Thao tác UNION sẽ loại bỏ các hàng trùng lặp giữa cả hai bảng. Kết quả sau được hiển thị dưới dạng:
Như tất cả chúng ta có thể thấy, kết quả năm hồ sơ đầu tiên là những nhân viên thuộc thành phố Pune hoặc Jaipur. Và các bản ghi còn lại là từ bảng nhân viên, truy vấn CHỌN thứ hai.
Cả hai bản ghi bảng đều được hiển thị ngoại trừ các bản ghi trùng lặp.
Ví dụ 4: Thực thi truy vấn để thực hiện thao tác UNION giữa bảng Nhân viên và bảng Nhân viên. Chúng tôi chỉ muốn các bản ghi đó từ bảng Nhân viên có tên nhân viên bắt đầu bằng V.
SELECT * FROM EMPLOYEES UNION SELECT * FROM EMPLOYEE WHERE FIRST_NAME LIKE 'V%';
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp tất cả các bản ghi từ bảng Nhân viên. Hoạt động UNION được thực hiện với các bản ghi được truy xuất từ truy vấn SELECT thứ hai từ nhân viên bảng có tên bắt đầu bằng 'V'.
Thao tác UNION sẽ loại bỏ các hàng trùng lặp giữa cả hai bảng. Kết quả sau được hiển thị là:
Như tất cả chúng ta có thể, 10 kết quả đầu tiên là từ bảng Nhân viên và phần còn lại là từ bảng Nhân viên có tên nhân viên bắt đầu bằng 'V'.
Ví dụ 5: Thực thi một truy vấn để thực hiện thao tác UNION giữa bảng Manager và bảng Manager1.
SELECT * FROM MANAGER UNION SELECT * FROM MANAGER1;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên truy xuất dữ liệu từ Trình quản lý và truy vấn SELECT thứ hai lấy dữ liệu từ dữ liệu manager1 và hoạt động UNION được thực hiện trên cả hai truy vấn SELECT.
Thao tác UNION sẽ loại bỏ các hàng trùng lặp giữa cả hai bảng. Kết quả sau được hiển thị dưới dạng:
Cả hai bản ghi bảng đều được hiển thị ngoại trừ các bản ghi trùng lặp.
LIÊN KẾT TẤT CẢ Nhà điều hành
Toán tử UNION ALL kết hợp tất cả dữ liệu từ cả hai truy vấn. Trong toán tử UNION, các bản ghi trùng lặp không được xem xét trong kết quả, nhưng UNION ALL được coi là các bản ghi trùng lặp trong kết quả thu được sau khi thao tác UNION ALL được thực hiện.
Cú pháp cho thao tác UNION ALL như sau,
SELECT * FROM TABLE_NAME1 UNION ALL SELECT * FROM TABLE_NAME2;
Ví dụ 1: Thực thi truy vấn để thực hiện thao tác UNION ALL giữa bảng Nhân viên và bảng Nhân viên.
SELECT * FROM EMPLOYEES UNION ALL SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ các nhân viên và thực hiện hoạt động UNION ALL với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai lấy dữ liệu từ bảng nhân viên.
Kết quả sau được hiển thị dưới dạng:
Tất cả các bản ghi sẽ được hiển thị từ cả hai bảng Nhân viên và Nhân viên, các bản ghi trùng lặp cũng được hiển thị khi chúng tôi thực hiện thao tác UNION ALL.
Ví dụ 2: Thực thi truy vấn để thực hiện thao tác UNION ALL giữa bảng Nhân viên và bảng Nhân viên. Nhưng chỉ hiển thị hồ sơ của những nhân viên đó từ bảng nhân viên thuộc thành phố Mumbai. Từ bảng nhân viên, chỉ những bản ghi nhân viên có mức lương của nhân viên là 60500 và thành phố là "Mumbai".
SELECT * FROM EMPLOYEES WHERE CITY = 'MUMBAI' UNION ALL SELECT * FROM EMPLOYEE WHERE SALARY = 60500 AND CITY = 'MUMBAI';
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên chỉ tìm nạp những bản ghi có nhân viên thuộc thành phố Mumbai từ bảng Nhân viên. Và thực hiện thao tác UNION ALL với truy vấn SELECT thứ hai chỉ tìm nạp những bản ghi có mức lương nhân viên là 60500 và thành phố là 'Mumbai' từ bảng nhân viên.
Kết quả sau được hiển thị dưới dạng:
Cả hai bản ghi bảng đều được hiển thị, bao gồm cả các bản ghi trùng lặp khi chúng tôi thực hiện UNION ALL hoạt động.
Ví dụ 3: Thực thi truy vấn để thực hiện thao tác UNION giữa bảng Nhân viên và bảng Nhân viên. Chúng tôi chỉ muốn các bản ghi đó từ bảng Nhân viên có thành phố nhân viên thuộc về 'Pune', 'Mumbai' và 'Jaipur'.
SELECT* FROM EMPLOYEES WHERE CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') UNION ALL SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp những bản ghi có nhân viên thuộc thành phố 'Pune', 'Mumbai' và 'Jaipur' từ bảng Nhân viên. Hoạt động UNION ALL được thực hiện với các bản ghi được truy xuất từ truy vấn SELECT thứ hai từ nhân viên bảng.
Kết quả sau được hiển thị dưới dạng:
Cả hai bản ghi bảng đều được hiển thị, bao gồm cả các bản ghi trùng lặp khi chúng tôi thực hiện UNION ALL hoạt động.
Ví dụ 4: Thực thi một truy vấn để thực hiện UNION ALL hoạt động giữa bảng Manager và bảng Manager1.
SELECT * FROM MANAGER UNION ALL SELECT * FROM MANAGER1;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ Manager và thực hiện UNION ALL hoạt động với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai truy xuất dữ liệu từ bảng manager1.
Kết quả sau được hiển thị là:
Tất cả các bản ghi sẽ được hiển thị từ cả hai bảng Manager và Manager1; các bản ghi trùng lặp được hiển thị khi chúng tôi thực hiện UNION ALL hoạt động.
Toán tử INTERSECT
Toán tử Intersect được sử dụng để kết hợp hai hoặc nhiều câu lệnh SELECT, nhưng nó chỉ hiển thị dữ liệu tương tự như câu lệnh SELECT.
Cú pháp cho hoạt động INTERSECT như sau,
SELECT * FROM TABLE_NAME1 INTERSECT SELECT * FROM TABLE_NAME2;
Ví dụ 1: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Nhân viên và bảng Nhân viên.
SELECT * FROM EMPLOYEES INTERSECT SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ nhân viên và thực hiện hoạt động INTERSECT với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai lấy dữ liệu từ bảng nhân viên.
Kết quả sau được hiển thị dưới dạng:
Chỉ các bản ghi tương tự sẽ được hiển thị từ cả hai bảng, khi chúng tôi thực hiện thao tác INTERSECT giữa bảng Nhân viên và bảng Nhân viên.
Ví dụ 2: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Manager và bảng Manager1.
SELECT * FROM MANAGER INTERSECT SELECT * FROM MANAGER1;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ Manager và thực hiện thao tác INTERSECT với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai truy xuất dữ liệu từ bảng Manager1.
Kết quả sau được hiển thị dưới dạng:
Chỉ các bản ghi tương tự sẽ được hiển thị từ cả hai bảng, khi chúng tôi thực hiện thao tác INTERSECT giữa bảng Trình quản lý và bảng Trình quản lý1.
MINUS Nhà khai thác
Toán tử MINUS được sử dụng để trả về các hàng có trong truy vấn đầu tiên nhưng không có trong phần còn lại của các truy vấn mà không có bản sao.
Cú pháp cho phép toán MINUS như sau.
SELECT * FROM TABLE_NAME1 EXCEPT SELECT * FROM TABLE_NAME2;
Lưu ý: Từ khóa MINUS chỉ được hỗ trợ trong cơ sở dữ liệu ORACLE. Chúng tôi có thể sử dụng từ khóa EXCEPT cho các cơ sở dữ liệu khác để thực hiện thao tác tương tự.
Ví dụ 1: Thực thi một truy vấn để thực hiện thao tác MINUS giữa bảng Nhân viên và bảng Nhân viên.
SELECT * FROM EMPLOYEES EXCEPT SELECT * FROM EMPLOYEE;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ các nhân viên và thực hiện thao tác MINUS với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai lấy dữ liệu từ bảng nhân viên.
Kết quả sau được hiển thị dưới dạng:
Chỉ các bản ghi chưa khớp sẽ được hiển thị từ cả hai bảng, khi chúng tôi thực hiện phép toán TRỪ giữa bảng Nhân viên và bảng Nhân viên.
Ví dụ 2: Thực thi một truy vấn để thực hiện MINUS hoạt động giữa bảng Trình quản lý và bảng Trình quản lý1.
SELECT * FROM MANAGER EXCEPT SELECT * FROM MANAGER1;
Trong truy vấn trên, chúng tôi đã sử dụng hai truy vấn SELECT. Truy vấn SELECT đầu tiên tìm nạp dữ liệu từ Manager và thực hiện thao tác MINUS với dữ liệu được tìm nạp bởi truy vấn SELECT thứ hai lấy dữ liệu từ bảng Manager1.
Kết quả sau được hiển thị dưới dạng:
Chỉ các bản ghi chưa khớp sẽ được hiển thị từ cả hai bảng, vì chúng tôi đã thực hiện MINUS thao tác giữa bảng Trình quản lý và bảng Trình quản lý1.