Unidad 6. Las subconsultas (V)


6.6. Subconsultas con cualquier número de columnas (EXISTS)

Existe otro operador de subconsulta con el que la subconsulta puede devolver más de una columna, el operador EXISTS.
En este caso la sintaxis es algo diferente:

WHERE [NOT] EXISTS subconsulta 

No se realiza ninguna comparación con los valores devueltos por la subconsulta, simplemente se evalúa si la subconsulta devuelve alguna fila, en este caso EXISTS será True y si la subconsulta no devuelve ninguna fila, EXISTS será False.

Ejemplo:

SELECT * 

FROM empleados

WHERE EXISTS (SELECT *

			FROM pedidos

			WHERE numemp = rep and fab ='ACI');

Obtenemos los empleados que tengan un pedido del fabricante ACI. Por cada empleado, se calcula la subconsulta (obteniendo los pedidos de ese empleado y con fabricante ACI), si existe alguna fila, el empleado sale en el resultado, si no, no sale.

Cuando se utiliza el operador EXISTS es muy importante añadir una referencia externa, no es obligatorio pero en la mayoría de los casos será necesario. Veámoslo con ese mismo ejemplo, si quitamos la referencia externa:

SELECT * 

FROM empleados

WHERE EXISTS (SELECT *

			FROM pedidos

			WHERE fab ='ACI');

Sea el empleado que sea,  la subconsulta siempre devolverá filas (si existe algún pedido cuyo fabricante sea ACI) o nunca, indistintamente del empleado que sea, por lo que se obtendrán todos los empleados o ninguno para que el resultado varíe según las filas de la consulta externa habrá que incluir una referencia externa.

Otra cosa a tener en cuenta es que la lista de selección de una subconsulta que se especifica con EXISTS casi siempre consta de un asterisco (*). No hay razón para enumerar los nombres de las columnas porque no se van a utilizar y supone un trabajo extra para el sistema.

Si utilizamos NOT EXISTS el resultado será el contrario.

SELECT * 

FROM empleados

WHERE NOT EXISTS (SELECT *

			    FROM pedidos

			    WHERE fab ='ACI' AND rep=numemp); 

Devuelve los empleados que no tienen ningún pedido de ACI.

Para practicar puedes realizar este Ejercicio Subconsultas con EXISTS.

• Ejercicio propuesto de la Unidad 6 • Prueba evaluativa de la Unidad 6
Febrero-2010
Pág. 6.5

Atrás  Inicio  Adelante



.