Consultas anidadas en SQL – Part 1

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *