2.5.8. La Intersercion

Para hacer la intersección entre dos o más sentencias SELECT FROM, podemos utilizar la cláusula INTERSECT, cuyo formato es

SELECT columnas FROM tabla [WHERE condiciones] INTERSECT [ALL] SELECT columnas FROM tabla [WHERE condiciones]; Si indicamos la opción ALL, aparecerán todas las filas obtenidas a partir de la intersección. No la pondremos si queremos eliminar las filas repetidas.

Lo más importante de la intersección es que somos nosotros quienes tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles; es decir, que tengan la misma interpretación semántica.


Utilización de la intersección en BDUOC

ciudad
Barcelona
Girona
Lleida
Tarragona


Si queremos saber todas las ciudades donde tenemos departamentos en los que podamos encontrar algún cliente, podríamos hacer:

 

 

 

SELECT ciudad FROM clientes INTERSECT SELECT ciudad_dep FROM departamentos;

El resultado de esta consulta sería el que se muestra al margen.


Sin embargo, la intersección es una de las operaciones del SQL que se puede hacer de más formas diferentes. También podríamos encontrar la intersección con IN o EXISTS:

a)  Intersección utilizando IN

SELECT columnas FROM tabla WHERE columna IN (SELECT columna FROM tabla [WHERE condiciones]);

b)  Intersección utilizando EXISTS

SELECT columnas FROM tabla WHERE EXISTS (SELECT * FROM tabla WHERE condiciones);
El ejemplo que hemos propuesto antes se podría expresar con IN: SELECT c.ciudad FROM clientes c WHERE c.ciudad IN (SELECT d.ciudad_dep FROM departamentos d);

o también con EXISTS:

SELECT c.ciudad FROM clientes c WHERE EXISTS (SELECT * FROM departamentos d WHERE c.ciudad = d.ciudad_dep;