sql >> Base de Datos >  >> RDS >> SQLite

Operador SQLite INTERSECT

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