En SQLite, el INTERSECT El operador se usa para crear un compuesto SELECT declaración que devuelve la intersección de los resultados de la izquierda y la derecha SELECT declaraciones. En otras palabras, combina dos consultas, pero devuelve solo las filas que se devuelven en ambas consultas.
Ejemplo
Supongamos que tenemos las siguientes tablas:
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 el INTERSECT operador para devolver empleados que también son clientes:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers; Resultado:
EmployeeName ------------ Ava Monish Rohit
Entonces solo obtenemos valores que aparecen en Employees que también aparecen en la tabla Customers mesa.
La implementación de SQLite del INTERSECT El operador solo devuelve filas distintas. Entonces, el ejemplo anterior devuelve solo una fila para Monish, aunque hay varios empleados y varios clientes con ese nombre.
Otros RDBMS nos permiten incluir duplicados en el resultado al aceptar un ALL opcional palabra clave con su INTERSECT operador, pero SQLite no (al menos, no en el momento de escribir este artículo). No dude en consultar la documentación de SQLite en caso de que algo cambie.
Una consulta alternativa
Es posible obtener el mismo resultado sin utilizar INTERSECT operador. Por ejemplo, podríamos reescribir nuestro primer ejemplo así:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName); Resultado:
EmployeeName ------------ Ava Rohit Monish