SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Operador SQLite INTERSECT


No SQLite, o INTERSECT operador é usado para criar um composto SELECT instrução que retorna a interseção dos resultados do SELECT esquerdo e direito declarações. Em outras palavras, ele combina duas consultas, mas retorna apenas as linhas que são retornadas em ambas as consultas.

Exemplo


Suponha que temos as seguintes tabelas:
SELECT * FROM Employees;
SELECT * FROM Customers;

Resultado:
EmployeeId  EmployeeName
----------  ------------
1           Bart        
2           Jan         
3           Ava         
4           Rohit       
5           Monish      
6           Monish      
7           Monish      

CustomerId  CustomerName
----------  ------------
1           Mia         
2           Rohit       
3           Peter       
4           Ava         
5           Monish      
6           Monish      

Podemos usar o INTERSECT operador para devolver funcionários que também são clientes:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Resultado:
EmployeeName
------------
Ava         
Monish      
Rohit       

Assim, só obtemos valores que aparecem no campo Employees tabela que também aparecem no Customers tabela.

Implementação do SQLite do INTERSECT operador retorna apenas linhas distintas. Portanto, o exemplo acima retorna apenas uma linha para Monish, mesmo que haja vários funcionários e vários clientes com esse nome.

Outros RDBMSs nos permitem incluir duplicatas no resultado aceitando um opcional ALL palavra-chave com seu INTERSECT operador, mas o SQLite não (pelo menos, não no momento da escrita). Sinta-se à vontade para verificar a documentação do SQLite caso algo mude.

Uma consulta alternativa


É possível obter o mesmo resultado sem usar o INTERSECT operador. Por exemplo, poderíamos reescrever nosso primeiro exemplo para isso:
SELECT 
    DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);

Resultado:
EmployeeName
------------
Ava         
Rohit       
Monish