2.5.9. La diferencia
2.5.9. La diferencia Dataprix 22 Septiembre, 2009 - 10:30Para encontrar la diferencia entre dos o más sentencias SELECT FROM podemos utilizar la cláusula EXCEPT, que tiene este formato:
SELECT columnas
FROM tabla
[WHERE condiciones]
EXCEPT [ALL]
SELECT columnas
FROM tabla
[WHERE condiciones];
Si ponemos la opción ALL aparecerán todas las filas que da la diferencia. No la pondremos si queremos eliminar las filas repetidas.
Lo más importante de la diferencia es que somos nosotros quienes tenemos que vigilar que se haga entre columnas definidas sobre dominios compatibles.
Utilización de la diferencia en BDUOC
codigo_cli |
40 |
Si queremos saber los clientes que no nos han contratado ningún proyecto, podríamos hacer:
SELECT codigo_cli
FROM clientes
EXCEPT
SELECT codigo_cliente
FROM proyectos;
El resultado de esta consulta sería el cliente con código 40.
La diferencia es, junto con la intersección, una de las operaciones del SQL que se puede realizar de más formas diferentes. También podríamos encontrar la diferencia utilizando NOT IN o NOT EXISTS:
a) Diferencia utilizando NOT IN:
SELECT columnas
FROM tabla
WHERE columna NOT IN (SELECT columna
FROM tabla
[WHERE condiciones]);
b) Diferencia utilizando NOT EXISTS:
SELECT columnas
FROM tabla
WHERE NOT EXISTS (SELECT *
FROM tabla
WHERE condiciones);
Ejemplo anterior expresado con NOT IN y con NOT EXISTS
El ejemplo que hemos hecho antes se podría expresar con NOT IN:
SELECT c.codigo_cli
FROM clientes c
WHERE c.codigo_cli NOT IN (SELECT p.codigo_cliente
FROM proyectos p);
o también con NOT EXISTS
SELECT c.codigo_cli
FROM clientes c
WHERE NOT EXISTS (SELECT *
FROM proyectos p
WHERE c.codigo_cli = p.codigo_cliente);