Está en la página 1de 4

SUBCONSULTAS

Las subconsultas, al igual que las operaciones con las que se relacionan tablas (join), son una forma de
recuperar datos de múltiples tablas con una sola consulta. Las subconsultas pueden ser parte de las
instrucciones SELECT, UPDATE o DELETE, sirven para recuperar información de una consulta previa a la
ejecución de la instrucción en cuestión.

Una subconsulta es una instrucción SELECT “interna” a una instrucción “externa”, los datos consultados en la
subconsulta sirven como entrada o condición para la ejecución de la instrucción externa.

 Una subconsulta debe ir entre paréntesis.


 Se puede usar subconsultas como expresión en la lista de columnas de una instrucción SELECT o en
cláusulas SET, WHERE o HAVING.
 Una subconsulta proporciona uno o más valores para evaluarse en la expresión de la cláusula WHERE o
HAVING.
 Se puede usar ALL, ANY o SOME (sinónimos ambos), para recuperar registros de la consulta principal,
que satisfagan la comparación con cualquier otro registro recuperado en la subconsulta.

Para SELECT, se puede utilizar tres formas de sintaxis para una subconsulta, partiendo de la siguiente
estructura:

SELECT BOLETA, NOMBRE_ALUMNO, CVE_CARRERA, PROMEDIO


FROM ALUMNO
WHERE PROMEDIO >= (SELECT AVG(PROMEDIO) FROM ALUMNO) AND CVE_CARRERA = 'N'

 Comparación [ANY | ALL | SOME] (instrucción sql)

SELECT BOLETA, CVE_SECUENCIA, CVE_UAP, PRIMER_DEP


FROM CALIFICACIONES_SEMESTRE
WHERE PRIMER_DEP > ANY (SELECT PROMEDIO FROM ALUMNO)

En el ejemplo se devolverán todos los renglones de CALIFICACIONES_SEMESTRE en los que PRIMER_DEP


sea mayor que cualquier PROMEDIO.

La cláusula ALL se utiliza para recuperar los renglones del SELECT principal que cumplan con la comparación
de todos los renglones recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la
consulta devolverá los renglones en los que PRIMER_DEP sea mayor que el de todos los valores de
PROMEDIO.

 Expresión [NOT] IN (instrucción sql)

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO


FROM ALUMNO
WHERE BOLETA IN (SELECT BOLETA FROM CALIFICACIONES_SEMESTRE
WHERE CVE_SECUENCIA = '4NV41' AND CVE_UAP = 'N21-N404')
La cláusula IN se usa para recuperar renglones de la consulta principal, únicamente si coinciden con los
valores descritos explícitamente en la subconsulta con un valor igual. El ejemplo siguiente devuelve
todos los alumnos inscritos en la Secuencia '4NVN1' y en la Unidad de Aprendizaje 'N21-N404'.

La cláusula NOT IN considera en el resultado todos los valores que no se encuentran en la subconsulta.

 [NOT] EXISTS (instrucción sql)

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO


FROM ALUMNO
WHERE EXISTS (SELECT * FROM CALIFICACIONES_SEMESTRE
WHERE CALIFICACIONES_SEMESTRE.BOLETA = ALUMNO.BOLETA)

La cláusula EXISTS (con NOT opcional) evalúa verdad/falso para determinar si la subconsulta regresa
algún renglón.

Comparación: Expresión y un operador de comparación con el resultado de la subconsulta.

Expresión: Con la que se busca el conjunto resultante de la subconsulta.

Cláusula Exist: Se identifica existencia

Instrucción SQL : Es una instrucción SELECT, con formato y reglas que cualquier instrucción SELECT.

Ejemplos de SUBCONSULTAS usando las tablas GRUPO, PROFESOR,


ALUMNO y CALIFICACIONES_SEMESTRE

1. Realiza una consulta para grupos por profesor, incluye: Clave de la secuencia, Clave de la Unidad de Aprendizaje y Nombre del profesor.

-- CONSULTA DE 3 COLUMNAS DE DOS TABLAS USANDO INNER JOIN

SELECT CVE_SECUENCIA, CVE_UAP, NOMBRE_PROFESOR


FROM GRUPO LEFT OUTER JOIN PROFESOR
ON GRUPO.NO_PROFESOR = PROFESOR.NO_PROFESOR

-- SUBCONSULTA EN LA LISTA DE COLUMNAS A RECUPERAR DE UNA INSTRUCCIÓN SELECT

SELECT CVE_SECUENCIA, CVE_UAP, (SELECT NOMBRE_PROFESOR FROM PROFESOR WHERE GRUPO.NO_PROFESOR = PROFESOR.NO_PROFESOR)
FROM GRUPO

2. Realiza una consulta para obtener los grupos del profesor “MOTA MARQUEZ OSCAR”, incluye: Clave de la secuencia, Clave de la Unidad de
Aprendizaje y Nombre del profesor.

--DOS INSTRUCCIONES
SELECT * FROM PROFESOR WHERE NOMBRE_PROFESOR = 'MOTA MARQUEZ OSCAR'
SELECT CVE_SECUENCIA, CVE_UAP, (SELECT NOMBRE_PROFESOR FROM PROFESOR
WHERE GRUPO.NO_PROFESOR = PROFESOR.NO_PROFESOR) NOMBRE
FROM GRUPO
WHERE NO_PROFESOR = '406'
--SOLO UNA CONSULTA CON SUBCONSULTAS EN LA LISTA DE COLUMNAS Y EN LA CLÁUSULA WHERE
SELECT CVE_SECUENCIA, CVE_UAP, (SELECT NOMBRE_PROFESOR FROM PROFESOR WHERE GRUPO.NO_PROFESOR = PROFESOR.NO_PROFESOR) NOMBRE
FROM GRUPO
WHERE NO_PROFESOR = (SELECT NO_PROFESOR FROM PROFESOR WHERE NOMBRE_PROFESOR = 'MOTA MARQUEZ OSCAR')

3. Realiza una actualización en la tabla adecuada para reasignar el grupo de secuencia “4NV41” de la UAp “N21-N404” del profesor “MOTA
MARQUEZ OSCAR”, reasignandoselos a la maestra “SALAS CRUZ ROCIO LETICIA”.

--DOS INSTRUCCIONES
SELECT * FROM PROFESOR WHERE NOMBRE_PROFESOR = 'SALAS CRUZ ROCIO LETICIA'
UPDATE GRUPO
SET NO_PROFESOR = '536'
WHERE NO_PROFESOR = (SELECT NO_PROFESOR
FROM PROFESOR
WHERE NO_PROFESOR = '406' AND CVE_SECUENCIA = '4NV41' AND CVE_UAP = 'N21-N404')

--SOLO LA INSTRUCCIÓN UPDATE CON SUBCONSULTA EN LA CLÁUSULA WHERE


UPDATE GRUPO
SET NO_PROFESOR = '536'
WHERE NO_PROFESOR = (SELECT NO_PROFESOR FROM PROFESOR WHERE NOMBRE_PROFESOR = 'MOTA MARQUEZ OSCAR' AND
CVE_SECUENCIA = '4NV41' AND CVE_UAP = 'N21-N404')

-- PARA RESTAURAR VALORES DEL “UPDATE”


UPDATE GRUPO SET NO_PROFESOR = '406' WHERE CVE_SECUENCIA = '4NV41' AND CVE_UAP = 'N21-N404'

4. Realiza una actualización en la tabla adecuada para reasignar los grupos del profesor “MOTA MARQUEZ OSCAR”, reasignandoselos a la
maestra “SALAS CRUZ ROCIO LETICIA”.

-- 3 INTRUCCIONES
SELECT * FROM PROFESOR WHERE NOMBRE_PROFESOR = 'SALAS CRUZ ROCIO LETICIA'
SELECT * FROM PROFESOR WHERE NOMBRE_PROFESOR = 'MOTA MARQUEZ OSCAR'
UPDATE GRUPO SET NO_PROFESOR = '536' WHERE NO_PROFESOR = '406'

--SOLO LA INSTRUCCIÓN UPDATE CON SUBCONSULTAS EN LAS CLÁUSULAS SET Y WHERE


UPDATE GRUPO
SET NO_PROFESOR = (SELECT NO_PROFESOR FROM PROFESOR WHERE NOMBRE_PROFESOR = 'SALAS CRUZ ROCIO LETICIA')
WHERE NO_PROFESOR = (SELECT NO_PROFESOR FROM PROFESOR WHERE NOMBRE_PROFESOR = 'MOTA MARQUEZ OSCAR')

-- PARA RESTAURAR VALORES DEL “UPDATE”


UPDATE GRUPO
SET NO_PROFESOR = '406'
WHERE (CVE_SECUENCIA = '3CM51' AND CVE_UAP = 'C6-C304 ') OR (CVE_SECUENCIA = '3CV50' AND CVE_UAP = 'C6-C304')
OR (CVE_SECUENCIA = '3NV30' AND CVE_UAP = 'N21-N306') OR (CVE_SECUENCIA = '4NM79' AND CVE_UAP = 'N2-N456')
OR (CVE_SECUENCIA = '4NV41' AND CVE_UAP = 'N21-N404') OR (CVE_SECUENCIA = '5CM52' AND CVE_UAP = 'C21-M501')
OR (CVE_SECUENCIA = '5CV51' AND CVE_UAP = 'C21-C503') OR (CVE_SECUENCIA = '5CV52' AND CVE_UAP = 'C21-M501')

5. Borra aL alumno “Kevin Ortiz Castro” de la tabla CALIFICACIONES_SEMESTRE, pues se dio de baja temporal .

--DOS INSTRUCCIONES
SELECT BOLETA, NOMBRE_ALUMNO FROM ALUMNO WHERE NOMBRE_ALUMNO = 'Kevin Ortiz Castro'
DELETE FROM CALIFICACIONES_SEMESTRE WHERE BOLETA = '2022601822'

--SOLO LA INSTRUCCIÓN DELETE CON SUBCONSULTA EN LA CLÁUSULA WHERE


DELETE FROM CALIFICACIONES_SEMESTRE
WHERE BOLETA = (SELECT BOLETA FROM ALUMNO WHERE NOMBRE_ALUMNO = 'Kevin Ortiz Castro')

-- PARA RESTAURAR VALORES DEL “DELETE”


INSERT INTO CALIFICACIONES_SEMESTRE
VALUES ('2022601822','4NM40','N21-N406','A',9,10,9,NULL), ('2022601822','4NV41','N21-N401','A',10,10,10,NULL),
('2022601822','4NV41','N21-N402','A',10,10,10,NULL), ('2022601822','4NV41','N21-N403','A',10,9,10,NULL),
('2022601822','4NV41','N21-N404','A',10,10,10,NULL), ('2022601822','5NV51','N21-N502','A',7,8,9,NULL)

Preguntas:

a) ¿Que es una Subconsulta?


b) ¿Que hace una Subconsulta?
c) ¿Que beneficio tiene utilizar Subconsultas?
d) ¿En qué instrucciones se puede ejecutar una Subconsulta?
e) ¿En dónde se puede incluir una Subconsulta (lugares y cláusulas)?
f) De la Base de Datos “CE” realiza una actualización de la tabla grupo para quitarle los grupos que tiene
asignados el profesor “MOTA MARQUEZ OSCAR”, dejando el grupo sin profesor asignado (Subconsulta en la
cláusula WHERE de la instrucción UPDATE)
g) De la Base de Datos “CE” realiza una consulta para obtener los grupos registrados en la tabla GRUPO
relacionados a la profesora “SALAS CRUZ ROCIO LETICIA”, incluye: No de profesor, Clave de la secuencia, Clave
de la Unidad de Aprendizaje y columnas de los horarios de clase (SUBCONSULTA en la cláusula WHERE de
instrucción SELECT)

También podría gustarte