Requisitos previos: conceptos básicos de SQL
En las consultas anidadas, una consulta se escribe dentro de una consulta. El resultado de la consulta interna se utiliza en la ejecución de la consulta externa. Usaremos las tablas ESTUDIANTE, CURSO, ESTUDIANTE_CURSO para comprender las consultas anidadas.
ALUMNO
S_ID | NOMBRE DE | DIRECCIÓN_S | S_TELÉFONO | SABIO |
S1 | RAM | DELHI | 9455123451 | 18 |
S2 | RAMESH | GURGAÓN | 9652431543 | 18 |
S3 | SUJIT | ROHTAK | 9156253131 | 20 |
S4 | SEGURO | DELHI | 9156768971 | 18 |
CURSO
ID_C | C_NOMBRE |
C1 | DSA |
C2 | Programación |
C3 | SGBD |
ESTUDIANTE_CURSO
S_ID | ID_C |
S1 | C1 |
S1 | C3 |
S2 | C1 |
S3 | C2 |
S4 | C2 |
S4 | C3 |
Existen principalmente dos tipos de consultas anidadas:
- Consultas anidadas independientes: en las consultas anidadas independientes, la ejecución de la consulta comienza desde la consulta más interna hasta las consultas más externas. La ejecución de la consulta interna es independiente de la consulta externa, pero el resultado de la consulta interna se usa en la ejecución de la consulta externa. Varios operadores como IN, NOT IN, ANY, ALL, etc. se utilizan para escribir consultas anidadas independientes.
IN: si queremos averiguar S_ID que están inscritos en C_NAME ‘DSA’ o ‘DBMS’, podemos escribirlo con la ayuda de una consulta anidada independiente y un operador IN. Desde la tabla COURSE , podemos encontrar C_ID para C_NAME ‘DSA’ o DBMS’ y podemos usar estos C_ID s para encontrar S_ID s de STUDENT_COURSE TABLE.
PASO 1: Encontrar C_ID para C_NAME =’DSA’ o ‘DBMS’
Seleccione C_ID del CURSO donde C_NAME = ‘DSA’ o C_NAME = ‘DBMS’
PASO 2: Usar C_ID del paso 1 para encontrar S_ID
Seleccione S_ID de STUDENT_COURSE donde C_ID IN
(SELECCIONE C_ID del CURSO donde C_NAME = ‘DSA’ o C_NAME =’DBMS’);
La consulta interna devolverá un conjunto con los miembros C1 y C3 y la consulta externa devolverá aquellos S_ID para los que C_ID es igual a cualquier miembro del conjunto (C1 y C3 en este caso). Entonces, devolverá S1, S2 y S4.
Nota: Si queremos averiguar los nombres de los ESTUDIANTES que se han inscrito en ‘DSA’ o ‘DBMS’, se puede hacer de la siguiente manera:
Seleccione S_NAME de STUDENT donde S_ID IN
(Seleccione S_ID de STUDENT_COURSE donde C_ID IN
(SELECCIONE C_ID del CURSO donde C_NAME =’DSA’ o C_NAME =’DBMS’));
NOT IN: Si queremos saber S_ID s de ESTUDIANTE s que no se han inscrito ni en ‘DSA’ ni en ‘DBMS’, se puede hacer de la siguiente manera:
Seleccione S_ID de STUDENT donde S_ID NOT IN
(Seleccione S_ID de STUDENT_COURSE donde C_ID IN
(SELECCIONE C_ID del CURSO donde C_NAME =’DSA’ o C_NAME =’DBMS’));
La consulta más interna devolverá un conjunto con los miembros C1 y C3. La segunda consulta interna devolverá aquellos S_ID para los que C_ID es igual a cualquier miembro del conjunto (C1 y C3 en este caso) que son S1, S2 y S4. La consulta más externa devolverá aquellos S_ID donde S_ID no es miembro del conjunto (S1, S2 y S4). Entonces devolverá S3.
- Consultas anidadas corelacionadas: en las consultas anidadas corelacionadas, la salida de la consulta interna depende de la fila que se está ejecutando actualmente en la consulta externa. p.ej; Si queremos averiguar S_NAME de STUDENT s que están inscritos en C_ID ‘C1’, se puede hacer con la ayuda de una consulta anidada corelacionada como:
Seleccione S_NOMBRE de ESTUDIANTE S donde EXISTE
( seleccione * de ESTUDIANTE_CURSO SC donde S. S_ID =SC. S_ID y SC. C_ID =’C1′);
Para cada fila de ESTUDIANTE S, encontrará las filas de ESTUDIANTE_CURSO donde S. S_ID = SC. S_ID y SC. C_ID = ‘C1’. Si para un S_ID del ESTUDIANTE S, existe al menos una fila en STUDENT_COURSE SC con C_ID = ‘C1’, la consulta interna devolverá verdadero y el S_ID correspondiente se devolverá como salida.
Este artículo ha sido aportado por Sonal Tuteja.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA