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;