Beruflich Dokumente
Kultur Dokumente
Las sub consultas pueden ser usadas para los siguientes propósitos:
• Proveer valores para condiciones en cláusulas WHERE, HAVING y
START WITH de sentencias SELECT
• Definir el conjunto de filas a ser insertadas en una tabla de una
sentencia INSERT o CREATE TABLE
1
Parcial II: 3 Lección 18
Nota: Una sub consulta es evaluada en una ocasión 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 condición 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 más valores condicionales desconocidos.
Donde:
Las sub consultas son a menudo referidas como sentencias SELECT anidadas,
sub-SELECT, o SELECT internos.
Las consultas internas y externas pueden recuperar datos de la misma tablao
de tablas diferentes.
2
Parcial II: 3 Lección 18
Ejemplo
Despliegue los nombres de todos los empleados que ganen menos que el
salario promedio de la compañía.
3
Parcial II: 3 Lección 18
Sintaxis:
4
Parcial II: 3 Lección 18
Una sub consulta de múltiples columnas puede también ser una comparación
no par. En una comparación no par, cada columna de la cláusula WHERE de la
sentencia SELECT padre es individualmente comparada con múltiples valores
recuperados por la sentencia SELECT interna. Las columnas individuales
pueden corresponder con algunos de los valores recuperados por la sentencia
SELECT interna. Pero en conjunto, todas las condiciones múltiples de la
sentencia SELECT principal deben ser satisfechas para las filas a ser
desplegadas. En los siguientes ejemplos se ilustra una comparación no par.
5
Parcial II: 3 Lección 18
6
Parcial II: 3 Lección 18
7
Parcial II: 3 Lección 18
Sin embargo, las sub consultas escalares no son expresiones válidas en los
siguientes lugares:
• Como valor por defecto para columnas y expresiones para clusters
• En la cláusula RETURNING de sentencias DML
• Como base de una función base indexada
• En la cláusula GROUP BY, constraints CHECK, condiciones WHEN
• Cláusulas HAVING
• En cláusulas START WITH y CONNECT BY
• En sentencias que no son relacionados con consultas, como CREATE
PROFILE
8
Parcial II: 3 Lección 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.
9
Parcial II: 3 Lección 18
10
Parcial II: 3 Lección 18
Nota: Puedes usar los operadores ANY y ALL en una sub consulta
correlacionada.
11
Parcial II: 3 Lección 18
12
Parcial II: 3 Lección 18
13
Parcial II: 3 Lección 18
Operador EXISTS
Cuando anidamos sentencias SELECT, todos los operadores lógicos son
válidos. 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 Lección 18
Solución 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 Lección 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 Lección 18
Problema en la sentencia
Use una sub consulta correlacionada para actualizar filas en la tabla
EMPLOYEES basándose en las filas de la tabla REWARDS:
17
Parcial II: 3 Lección 18
DELETE Correlacionado
En el caso de la sentencia DELETE, se puede usar una sub consulta
correlacionada para eliminar solo aquellas filas que también existan en otra
tabla. Si decides que debes mantener solo los últimos cuatro registros
históricos de la tabla JOB_HISTORY, entonces cuando un empleado sea
transferido a su quito puesto, debes de eliminar las filas mas antiguas. El
siguiente código muestra como se puede usar un DELETE correlacionado:
18
Parcial II: 3 Lección 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
Cláusula WITH
Usando la cláusula WITH, se puede definir un bloque de una consulta antes de
que esta sea usada. La cláusula WITH (formalmente conocida como
“subquery_factoring_clausula” cláusula de sub consulta factorizada) habilita la
reutilización del mismo bloque de la consulta en una sentencia SELECT
cuando esto ocurre en mas de una ocasión 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.
19
Parcial II: 3 Lección 18
Problema
Usando la cláusula WITH, escriba una consulta para desplegar el nombre del
departamento y el salario total para aquellos departamentos cuyo salario total
es mayor que el salario promedio de los departamentos.
20
Parcial II: 3 Lección 18
Resumen
En este capítulo se ha revisado lo siguiente:
• Una sub consulta de múltiples columnas obtiene mas de una columna
• Las comparaciones de múltiples columnas pueden ser en pares o no
pares.
• Una sub consulta de múltiples columnas puede también ser usada en la
cláusula FROM de una sentencia SELECT
• Las sub consultas escalares han sido mejoradas en Oracle9i
• Las sub consultas correlacionadas son útiles cuando una sub consulta
debe obtener un resultado diferente por cada fila candidata
• El operador EXISTS es un operador Boleano que verifica la presencia de
un valor
• Las sub consultas correlacionadas pueden ser usadas con sentencias
SELECT, UPDATE y DELETE
• Se puede usar la cláusula WITH para usar el mismo bloque de consulta
en una sentencia SELECT cuando esta sea necesaria en más de una
ocasión.
21