Toán tử giao nhau trong SQL đượ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 thao tác INTERSECT:
SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME1 INTERSECT SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME2;
Các quy tắc cần tuân theo khi sử dụng toán tử INTERSECT 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 khái niệm INTERSECT của SQL với sự trợ giúp của 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:Sinh viên
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
1 | NEHA | 85 | 88 | 100 | 273 |
2 | VISHAL | 70 | 90 | 82 | 242 |
3 | MẪU | 75 | 88 | 96 | 259 |
4 | NIKHIL | 60 | 75 | 80 | 215 |
5 | YOGESH | 56 | 65 | 78 | 199 |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
10 | PRACHI | 90 | 80 | 75 | 245 |
101 | SNEHA | 85 | 88 | 100 | 273 |
103 | VISHAL | 75 | 88 | 96 | 259 |
Bảng 2:Stud
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
4 | NIKHIL | 60 | 75 | 80 | 215 |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
9 | SANKET | 86 | 78 | 65 | 229 |
101 | SNEHA | 85 | 88 | 100 | 273 |
102 | MẪU | 70 | 90 | 82 | 242 |
103 | VISHAL | 75 | 88 | 96 | 259 |
105 | YOGESHWARI | 56 | 65 | 78 | 199 |
106 | VINAY | 85 | 90 | 100 | 275 |
107 | PRASHAKA | 90 | 80 | 75 | 245 |
8 | VINEET | 85 | 90 | 100 | 275 |
Ví dụ 1: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Sinh viên và bảng Stud.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD;
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ừ bảng Sinh viên. Nó 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 truy xuất dữ liệu từ bảng Stud. Chỉ các bản ghi tương tự giữa hai bảng này mới được chọn.
Kết quả từ truy vấn trên là:
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
4 | NIKHIL | 60 | 75 | 80 | 215 |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
101 | SNEHA | 85 | 88 | 100 | 273 |
103 | VISHAL | 75 | 88 | 96 | 259 |
Chỉ các bản ghi chung giữa Bảng Sinh viên và Bảng Học viên mới được hiển thị.
Ví dụ 2: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Sinh viên và bảng Stud nhưng chỉ hiển thị các bản ghi Sinh viên đó từ bảng Stud nơi điểm toán bằng 100.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS = 100;
Kết quả từ truy vấn trên là:
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
101 | SNEHA | 85 | 88 | 100 | 273 |
Chỉ những hồ sơ của những sinh viên đó được hiển thị có điểm toán bằng 100 từ bảng Stud và là điểm chung giữa cả bảng Student và Stud.
Ví dụ 3: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Sinh viên và bảng Học sinh nhưng chỉ hiển thị các bản ghi Sinh viên đó từ bảng Sinh viên có điểm hóa học lớn hơn 80.
SELECT * FROM STUDENT WHERE CHEMISTRY_MARKS > 80 INTERSECT SELECT * FROM STUD;
Kết quả từ truy vấn trên là:
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
101 | SNEHA | 85 | 88 | 100 | 273 |
103 | VISHAL | 75 | 88 | 96 | 259 |
Chỉ những hồ sơ của những sinh viên đó được hiển thị có điểm hóa học lớn hơn 80 từ Bảng Sinh viên và là điểm chung giữa cả Bảng Sinh viên và Học sinh.
Ví dụ 4: Thực thi truy vấn để thực hiện thao tác INTERSECT giữa bảng Sinh viên và bảng Stud và chỉ hiển thị các bản ghi Sinh viên có điểm vật lý lớn hơn 75 từ Bảng sinh viên và truy vấn chọn thứ hai chỉ hiển thị các bản ghi Sinh viên có điểm toán lớn hơn 90 từ Stud.
SELECT * FROM STUDENT WHERE PHYSICS_MARKS > 75 INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS > 90;
Kết quả từ truy vấn trên là:
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
101 | SNEHA | 85 | 88 | 100 | 273 |
Chỉ những hồ sơ của những sinh viên đó được hiển thị có điểm vật lý lớn hơn 75 từ Bảng học sinh và điểm toán lớn hơn 90 từ Bảng học sinh và là điểm chung giữa cả bảng Học sinh và học sinh.