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