Operátor SQL intersect se používá ke kombinaci dvou nebo více příkazů SELECT, ale zobrazuje pouze data podobná příkazu SELECT.
Syntaxe operace INTERSECT:
SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME1 INTERSECT SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME2;
Pravidla pro použití operátoru INTERSECT jsou následující:
- Počet sloupců a pořadí sloupců musí být stejné.
- Typ dat musí být kompatibilní.
Pojďme pochopit koncept SQL INTERSECT pomocí příkladů.
Zvažte následující tabulky spolu s danými záznamy.
Tabulka 1:Student
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 | SAMKEET | 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 |
Tabulka 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 | SAMKEET | 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 |
Příklad 1: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou Student a tabulkou Stud.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD;
Ve výše uvedeném dotazu jsme použili dva dotazy SELECT. První SELECT dotaz načte data z tabulky Student. Provádí operaci INTERSECT s daty načtenými druhým SELECT dotazem, který získává data z tabulky Stud. Jsou vybrány pouze podobné záznamy mezi těmito dvěma tabulkami.
Výstup z výše uvedeného dotazu je:
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 |
Jsou zobrazeny pouze společné záznamy mezi tabulkami studentů a tabulkami studů.
Příklad 2: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou Student a tabulkou Stud, ale zobrazte pouze ty záznamy studentů z tabulky Stud, kde jsou známky z matematiky rovny 100.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS = 100;
Výstup z výše uvedeného dotazu je:
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 |
Jsou zobrazeny pouze záznamy těch studentů, jejichž matematické známky jsou rovné 100 z tabulky Stud a jsou společné pro tabulku Student i Stud.
Příklad 3: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou Student a tabulkou Stud, ale zobrazte pouze ty záznamy studentů z tabulky Student, kde jsou známky z chemie větší než 80.
SELECT * FROM STUDENT WHERE CHEMISTRY_MARKS > 80 INTERSECT SELECT * FROM STUD;
Výstup z výše uvedeného dotazu je:
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 |
Jsou zobrazeny pouze záznamy těch studentů, jejichž chemické známky jsou vyšší než 80 z tabulky Student a jsou společné pro tabulku Student i Stud.
Příklad 4: Proveďte dotaz pro provedení operace INTERSECT mezi tabulkou studenta a tabulkou stud a zobrazte pouze ty záznamy studentů, kde jsou známky z fyziky vyšší než 75 z tabulky studentů, a druhý výběr dotazů, které zobrazí pouze ty záznamy studentů, kde jsou známky z matematiky vyšší než 90 z tabulky studentů. Stud.
SELECT * FROM STUDENT WHERE PHYSICS_MARKS > 75 INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS > 90;
Výstup z výše uvedeného dotazu je:
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 |
Jsou zobrazeny pouze záznamy studentů, jejichž známky z fyziky jsou vyšší než 75 z tabulky studentů a známky z matematiky jsou vyšší než 90 z tabulky studujících a jsou společné pro tabulku studentů i studů.