Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SubConsultas SQL
SubConsultas SQL
Leccin 18
Parcial II: 3
Leccin 18
Nota: Una sub consulta es evaluada en una ocasin para toda la sentencia
padre.
Sub consultas
Se pueden construir sentencias poderosas utilizando sub consultas. Las sub
consultas pueden ser muy tiles cuando necesites seleccionar filas de una
tabla con una condicin que dependa de los datos de la misma u otra tabla. Las
sub consultas son muy tiles para escribir sentencias SQL que necesiten
valores de un o ms valores condicionales desconocidos.
Donde:
operator
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
Sin embargo, las sub consultas escalares no son expresiones vlidas en los
siguientes lugares:
Como valor por defecto para columnas y expresiones para clusters
En la clusula RETURNING de sentencias DML
Como base de una funcin base indexada
En la clusula GROUP BY, constraints CHECK, condiciones WHEN
Clusulas HAVING
En clusulas START WITH y CONNECT BY
En sentencias que no son relacionados con consultas, como CREATE
PROFILE
Parcial II: 3
Leccin 18
El segundo ejemplo usa una sub consulta correlacionada. En una sub consulta
correlacionada, la sub consulta hace referencia a una columna de una tabla
referida en una sentencia padre. Las sub consultas correlacionadas son
explicadas en el siguiente tema.
Parcial II: 3
Leccin 18
10
Parcial II: 3
Leccin 18
11
Parcial II: 3
Leccin 18
12
Parcial II: 3
Leccin 18
13
Parcial II: 3
Leccin 18
Operador EXISTS
Cuando anidamos sentencias SELECT, todos los operadores lgicos son
vlidos. En suma, se puede usar el operador EXISTS. Este operador es
frecuentemente usado en sub consultas correlacionadas para verificar cuando
un valor recuperado por la consulta externa existe en el conjunto de resultados
obtenidos por la consulta interna. Si la sub consulta obtiene al menos una fila,
el operador obtiene el valor TRUE. Si el valor no existe, se obtiene el valor
FALSE. Consecuentemente, NOT EXISTS verifica cuando un valor recuperado
por la consulta externa no es parte del conjunto de resultados obtenidos por la
consulta interna.
14
Parcial II: 3
Leccin 18
Solucin alternativa
Un operador NOT IN puede ser utilizado como una alternativa para el operador
NOT EXISTS, como se muestra en el siguiente ejemplo:
15
Parcial II: 3
Leccin 18
UPDATE Correlacionado
En el caso de la sentencia UPDATE, se puede usar una sub consulta
correlacionada para actualizar filas en una tabla con base a las filas de otra
tabla.
16
Parcial II: 3
Leccin 18
Problema en la sentencia
Use una sub consulta correlacionada para actualizar filas en la tabla
EMPLOYEES basndose en las filas de la tabla REWARDS:
17
Parcial II: 3
Leccin 18
DELETE Correlacionado
En el caso de la sentencia DELETE, se puede usar una sub consulta
correlacionada para eliminar solo aquellas filas que tambin existan en otra
tabla. Si decides que debes mantener solo los ltimos cuatro registros
histricos de la tabla JOB_HISTORY, entonces cuando un empleado sea
transferido a su quito puesto, debes de eliminar las filas mas antiguas. El
siguiente cdigo muestra como se puede usar un DELETE correlacionado:
18
Parcial II: 3
Leccin 18
Ejemplo
Dos tablas son usadas en este ejemplo:
La tabla EMPLOYEES, que proporciona los detalles de los empleados
actuales
La tabla EMP_HISTORY, que proporciona los detalles de los empleados
anteriores
EMP_HISTORY contiene los datos de los empleados anteriores, sin embargo
esto podra ser incorrecto si el mismo empleado existe en ambas tablas. El
ejemplo anterior elimina los registros incorrectos con el uso de una sub
consulta correlacionada.
Clusula WITH
Usando la clusula WITH, se puede definir un bloque de una consulta antes de
que esta sea usada. La clusula WITH (formalmente conocida como
subquery_factoring_clausula clusula de sub consulta factorizada) habilita la
reutilizacin del mismo bloque de la consulta en una sentencia SELECT
cuando esto ocurre en mas de una ocasin en una consulta compleja. Esto es
particularmente til cuando una consulta tiene muchas referencias al mismo
bloque de una consulta y se tienen asociaciones y agrupaciones.
Usando la clusula WITH, se puede reutilizar la misma consulta cuando es de
alto costo evaluar el bloque de la consulta y ocurre ms de una vez en una
consulta compleja. Usando la clusula WITH, el servidor de Oracle recupera los
resultados de un bloque de la consulta y los almacena en un tablespace
temporal del usuario. Esto puede mejorar el desempeo.
19
Parcial II: 3
Leccin 18
Parcial II: 3
Leccin 18
21