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