O operador de interseção SQL é usado para combinar duas ou mais instruções SELECT, mas exibe apenas os dados semelhantes à instrução SELECT.
A sintaxe da operação INTERSECT:
SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME1 INTERSECT SELECT COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3 FROM TABLE_NAME2;
As regras a serem seguidas usando o operador INTERSECT são as seguintes:
- O número de colunas e a ordem das colunas devem ser iguais.
- O tipo de dados deve ser compatível.
Vamos entender o conceito de SQL INTERSECT com a ajuda de exemplos.
Considere as tabelas a seguir junto com os registros fornecidos.
Tabela 1:Aluno
ID_ESTUDANTE | ESTUDENT_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 | NIQUIL | 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 | PRAQUI | 90 | 80 | 75 | 245 |
101 | SNEHA | 85 | 88 | 100 | 273 |
103 | VISHAL | 75 | 88 | 96 | 259 |
Tabela 2:Stud
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
4 | NIQUIL | 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 |
Exemplo 1: Execute uma consulta para realizar a operação INTERSECT entre a tabela Student e a tabela Stud.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD;
Na consulta acima, usamos duas consultas SELECT. A primeira consulta SELECT busca os dados da tabela Student. Ele executa a operação INTERSECT com os dados buscados pela segunda consulta SELECT que recupera os dados da tabela Stud. Apenas registros semelhantes entre essas duas tabelas são selecionados.
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_NAME | PHYSICS_MARKS | CHEMISTRY_MARKS | MATHS_MARKS | TOTAL_MARKS |
4 | NIQUIL | 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 |
Apenas os registros comuns entre a Tabela do Aluno e as tabelas do Stud são exibidos.
Exemplo 2: Execute uma consulta para realizar a operação INTERSECT entre a tabela Student e a tabela Stud, mas exiba apenas os registros Student da tabela Stud em que as notas matemáticas são iguais a 100.
SELECT * FROM STUDENT INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS = 100;
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_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 |
Somente os registros dos alunos são exibidos cujas notas matemáticas são iguais a 100 da tabela Stud e são comuns entre a tabela Student e Stud.
Exemplo 3: Execute uma consulta para realizar a operação INTERSECT entre a tabela Student e a tabela Stud, mas exiba apenas os registros Student da tabela Student em que as notas de química são maiores que 80.
SELECT * FROM STUDENT WHERE CHEMISTRY_MARKS > 80 INTERSECT SELECT * FROM STUD;
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_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 |
Somente os registros dos alunos são exibidos cujas notas de química são maiores que 80 na Tabela do Aluno e são comuns entre a tabela Aluno e Stud.
Exemplo 4: Execute uma consulta para realizar a operação INTERSECT entre a tabela Student e a tabela Stud e exiba apenas os registros do aluno em que as notas de física são maiores que 75 da tabela do aluno e, em segundo lugar, selecione as consultas que exibem apenas os registros do aluno em que as notas de matemática são maiores que 90 da tabela Viga.
SELECT * FROM STUDENT WHERE PHYSICS_MARKS > 75 INTERSECT SELECT * FROM STUD WHERE MATHS_MARKS > 90;
A saída da consulta acima é:
ID_ESTUDANTE | ESTUDENT_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 |
Somente os registros dos alunos são exibidos cujas notas de física são maiores que 75 na Tabela do Aluno e as notas de matemática são maiores que 90 na Tabela de Stud e são comuns entre a tabela do Aluno e a tabela de Stud.