2.5.8. La Intersercion
2.5.8. La Intersercion Dataprix 22 Septiembre, 2009 - 10:27Para 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;